Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf XmlDataProvider筛选选定元素的子节点_Wpf_Xpath_Combobox_Xmldataprovider_2 Way Object Databinding - Fatal编程技术网

Wpf XmlDataProvider筛选选定元素的子节点

Wpf XmlDataProvider筛选选定元素的子节点,wpf,xpath,combobox,xmldataprovider,2-way-object-databinding,Wpf,Xpath,Combobox,Xmldataprovider,2 Way Object Databinding,我正在使用XmlDataProvider将一些UI控件与XML文件内容绑定。 在下面的代码中,DataGrid显示XML文件中的指令列表。 我有两个组合框。第一个组合框应包含所选指令(在数据网格中)的子节点,其方向属性等于Input 第二个组合框应包含所选指令(在数据网格中)的子节点,其方向属性等于输出 我的问题是,我无法找到填写组合框控件的ItemsSource以获得所需内容所需的XPath表达式。 实际上,它显示两个组合框中的所有子节点 以下是XAML标记: <Window x:Cla

我正在使用XmlDataProvider将一些UI控件与XML文件内容绑定。 在下面的代码中,DataGrid显示XML文件中的指令列表。 我有两个
组合框
。第一个组合框应包含所选指令(在数据网格中)的子节点,其方向属性等于Input

第二个组合框应包含所选指令(在数据网格中)的子节点,其方向属性等于输出

我的问题是,我无法找到填写
组合框
控件的ItemsSource以获得所需内容所需的XPath表达式。 实际上,它显示两个组合框中的所有子节点

以下是XAML标记:

<Window x:Class="XmlProviderDataGrid.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Window.Resources>
        <DataTemplate x:Key="ParamterTemplate">
            <StackPanel Orientation="Horizontal">
                <TextBlock Margin="3" Text="Name: "/>
                <TextBlock Margin="3" Text="{Binding XPath=@Name}"/>
                <TextBlock Margin="3" Text="-"/>
                <TextBlock Margin="3" Text="DataType: "/>
                <TextBlock Margin="3" Text="{Binding XPath=@DataType}"/>
                <TextBlock Margin="3" Text="-"/>
                <TextBlock Margin="3" Text="Direction: "/>
                <TextBlock Margin="3" Text="{Binding XPath=@Direction}"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>

    <Grid ShowGridLines="True">
        <Grid.DataContext>
            <XmlDataProvider Source="XMLMapping.xml" XPath="InstructionsMapping/Instruction"/>
        </Grid.DataContext>
        <Grid.RowDefinitions>
            <RowDefinition Height="150*" />
            <RowDefinition Height="181*" />
            <RowDefinition Height="181*" />
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="250*"/>
            <ColumnDefinition Width="260*" />
        </Grid.ColumnDefinitions>

        <DataGrid x:Name="dataGrid1" Margin="8,8,8,0" Grid.Row="0" Grid.ColumnSpan="2"
            AutoGenerateColumns="False" ItemsSource="{Binding}" 
            Height="100" VerticalAlignment="Top" 
            IsSynchronizedWithCurrentItem="True">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding XPath=@Name}" Header="Name"/>
                <DataGridTextColumn Binding="{Binding XPath=@ConvertedFrom}" Header="ConvertedFrom"/>
                <DataGridTextColumn Binding="{Binding XPath=@InstType}" Header="Type"/>
                <DataGridTextColumn Binding="{Binding XPath=@Data}" Header="Data file"/>
                <DataGridTextColumn Binding="{Binding XPath=@Inputs}" Header="Inputs"/>
            </DataGrid.Columns>
        </DataGrid>

        <Button Margin="5" VerticalAlignment="Top" Grid.Row="1" Grid.Column="0" Content="New Instruction" Click="OnCreateNewInstruction"/>
        <Button Margin="5" VerticalAlignment="Top" Grid.Row="1" Grid.Column="1" Content="Edit Instruction" Click="OnEditNewInstruction"/>


        <StackPanel Grid.Row="2"  Grid.Column="1">
            <Label  Background="Gray" FontSize="12" BorderBrush="Black" BorderThickness="1" FontWeight="Bold" >Output Parameters:</Label>
            <ComboBox x:Name="lstOutput" Margin="5" VerticalAlignment="Top" HorizontalAlignment="Stretch"
                         ItemsSource="{Binding Path=SelectedItem, ElementName=dataGrid1, UpdateSourceTrigger=PropertyChanged}"
                         ItemTemplate ="{StaticResource ParamterTemplate}"                    
                         IsSynchronizedWithCurrentItem="True" Visibility="Visible">
            </ComboBox>
        </StackPanel>
        <StackPanel Grid.Row="2"  Grid.Column="0">
        <Label  Background="Gray" FontSize="12" BorderBrush="Black" BorderThickness="1" FontWeight="Bold" Grid.Column="0">Input Parameters:</Label>
            <ComboBox x:Name="lstInput" Margin="5,5,5,5" VerticalAlignment="Top" HorizontalAlignment="Stretch"  
                     ItemsSource="{Binding Path=SelectedItem, ElementName=dataGrid1, UpdateSourceTrigger=PropertyChanged}"
                     ItemTemplate ="{StaticResource ParamterTemplate}"                    
                     IsSynchronizedWithCurrentItem="True" Visibility="Visible">
            </ComboBox>
        </StackPanel>
        </Grid>    
</Window>

输出参数:
输入参数:
在这里您可以找到我使用过的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<InstructionsMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" CatalogID="Micro_8">
  <Instruction Name="XIC" ConvertedFrom="XIC" DataFilePath="\Project18_v1.7z">
    <Parameter Name="Out14" Direction="Output" DataType="Bool" />
    <Parameter Name="Out2" Direction="Output" DataType="Bool" />
    <Parameter Name="In3" Direction="Input" DataType="Real" />
    <Parameter Name="In11" Direction="Input" DataType="Real" />
    <Parameter Name="In13" Direction="Input" DataType="Dint" />
  </Instruction>
  <Instruction Name="OTE" ConvertedFrom="OTE" DataFilePath="\Project18_v1.7z">
    <Parameter Name="In1" Direction="Input" DataType="Bool" />
    <Parameter Name="In2" Direction="Input" DataType="Dint" />
    <Parameter Name="In3" Direction="Input" DataType="Real" />
    <Parameter Name="Ou1" Direction="Output" DataType="Bool" />
    <Parameter Name="Out2" Direction="Output" DataType="Bool" />
  </Instruction>
  <Instruction Name="TON" ConvertedFrom="TON" DataFilePath="\Project18_v1.7z">
    <Parameter Name="In1" Direction="Input" DataType="Bool" />
    <Parameter Name="In2" Direction="Input" DataType="Dint" />
    <Parameter Name="In3" Direction="Input" DataType="Real" />
    <Parameter Name="Ou1" Direction="Output" DataType="Bool" />
    <Parameter Name="Out2" Direction="Output" DataType="Bool" />
  </Instruction>
  <Instruction Name="ADD" ConvertedFrom="+" DataFilePath="\Project18_v1.7z">
    <Parameter Name="In1" Direction="Input" DataType="Bool" />
    <Parameter Name="In2" Direction="Input" DataType="Real" />
    <Parameter Name="In3" Direction="Input" DataType="Real" />
    <Parameter Name="In4" Direction="Input" DataType="Real" />
    <Parameter Name="In5" Direction="Input" DataType="Bool" />
  </Instruction>
  <Instruction Name="ADD" ConvertedFrom="+" DataFilePath="\Project18_v1.7z">
    <Parameter Name="In1" Direction="Output" DataType="Bool" />
    <Parameter Name="In2" Direction="Output" DataType="Bool" />
    <Parameter Name="In3" Direction="Output" DataType="Dint" />
    <Parameter Name="In4" Direction="Output" DataType="Bool" />
    <Parameter Name="In5" Direction="Output" DataType="Dint" />
  </Instruction>
</InstructionsMapping>

一种可能的方法:

<ComboBox x:Name="lstInput" Margin="5,5,5,5" VerticalAlignment="Top" HorizontalAlignment="Stretch"  
         DataContext="{Binding Path=SelectedItem, ElementName=dataGrid1, UpdateSourceTrigger=PropertyChanged}"
         ItemsSource="{Binding XPath=Parameter[@Direction\=\'Input\']}"
         ItemTemplate ="{StaticResource ParamterTemplate}"                    
         IsSynchronizedWithCurrentItem="True" Visibility="Visible">
</ComboBox>