C # WPF: отображение дочерних узлов выбранного родительского узла в виде сетки - PullRequest
0 голосов
/ 03 августа 2010

У меня есть xml как это:

<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>

Теперь в списке отображаются проекты. Когда проект выбран в списке, сетка должна отображать строки. Возможно ли это сделать в Xaml? Или я должен сделать это в коде как часть события selectionChanged listbox?

1 Ответ

1 голос
/ 03 августа 2010

Да. Просто назовите ваш ListBox, свяжите свойство DataContext DataGrid со свойством SelectedItem объекта ListBox, а затем установите для ItemsSource DataGrid соответствующий узел xml.

См. Код ниже. Однако вместо DataGrid он использует ListView.

<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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...