代码之家  ›  专栏  ›  技术社区  ›  excray

C#WPF:将所选父节点的子节点显示为网格

  •  0
  • excray  · 技术社区  · 16 年前

    <root>
    <project name="p1">
     <row field1="31" field2="3" Name="Joe"/>
      <row field1="39" field2="3" Name="Joey"/>
      <row field1="37" field2="3" Name="Joei"/>
    </project>
    <project name="p2">
     <row field1="31" field2="3" Name="Joe"/>
      <row field1="39" field2="3" Name="Joey"/>
    </project>
    </root>
    

    1 回复  |  直到 16 年前
        1
  •  1
  •   ASanch    16 年前

    对。只需命名ListBox,将DataGrid的DataContext属性绑定到ListBox的SelectedItem属性,然后将DataGrid的ItemsSource设置为相应的xml节点。

    <Window x:Class="WpfApplication1.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>
        <XmlDataProvider x:Key="data">
            <x:XData>
                <root xmlns="">
                    <project name="p1">
                        <row field1="31" field2="3" Name="Joe"/>
                        <row field1="39" field2="3" Name="Joey"/>
                        <row field1="37" field2="3" Name="Joei"/>
                    </project>
                    <project name="p2">
                        <row field1="31" field2="3" Name="Joe"/>
                        <row field1="39" field2="3" Name="Joey"/>
                    </project>
                </root>
            </x:XData>
        </XmlDataProvider>
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="3*"/>
        </Grid.ColumnDefinitions>
    
        <ListBox x:Name="listBox" ItemsSource="{Binding Source={StaticResource data}, XPath=root/project}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding XPath=@name}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    
        <ListView Grid.Column="1" DataContext="{Binding ElementName=listBox, Path=SelectedItem}" ItemsSource="{Binding XPath=row}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Field1" DisplayMemberBinding="{Binding XPath=@field1}"/>
                    <GridViewColumn Header="Field2" DisplayMemberBinding="{Binding XPath=@field2}"/>
                    <GridViewColumn Header="Field3" DisplayMemberBinding="{Binding XPath=@Name}"/>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>