WPF XML数据绑定基于选择

时间:2017-05-28 17:14:41

标签: c# xml wpf xaml data-binding

我正在尝试根据选择动态更改xml数据绑定。

列表框与电影名称绑定,根据电影名称的选择,我需要数据网格中相应的艺术家名称。

示例 - 如果我们选择Movie1,那么我需要显示艺术家1,艺术2和艺术家3

Plz帮助我如何实现上述解决方案。以下是我的尝试。

下面是我的xml

<Movies>
  <Movie Name = "Movie 1">
    <Artist Name="Artist 1"/>
    <Artist Name="Artist 2"/>
    <Artist Name="Artist 3"/>
  </Movie>
  <Movie Name = "Movie 2">
    <Artist Name="Artist 11"/>
    <Artist Name="Artist 22"/>
    <Artist Name="Artist 33"/>
  </Movie>
</Movies>

以下是我的Xaml

<ListBox 
    Grid.Column="0" 
    Width="100" 
    DataContext="{StaticResource MovieData}" 
    ItemsSource="{Binding XPath=/Movies/Movie/@Name}"
    />

<DataGrid 
    Grid.Column="1" 
    Width="200" 
    x:Name="dgridEmp" 
    DataContext="{StaticResource MovieData}" 
    ItemsSource="{Binding XPath=/Movies/Movie/Artist}"
    AutoGenerateColumns="False"
    >
    <DataGrid.Columns>
        <DataGridTextColumn 
            Header="Name" 
            Binding="{Binding XPath=@Name}" 
            />
    </DataGrid.Columns>
</DataGrid>

2 个答案:

答案 0 :(得分:1)

这对我有用。我稍微修改了ListBox上的绑定:现在ListBox包含一个Movie元素列表,但它只显示每个元素的@Name。

DataGrid使用ListBox中选定的Movie元素作为其DataContext,然后使用XPath从所选Movie中提取所有Artist元素。

<ListBox 
    Width="100" 
    x:Name="MovieSelector"
    ItemsSource="{Binding Source={StaticResource MovieData}, XPath=Movies/Movie}"
    HorizontalAlignment="Left"
    DisplayMemberPath="@Name"
    />

<DataGrid 
    Grid.Column="1" 
    Width="200" 
    x:Name="dgridEmp" 
    DataContext="{Binding SelectedItem, ElementName=MovieSelector}"
    ItemsSource="{Binding XPath=Artist}"
    AutoGenerateColumns="False"
    HorizontalAlignment="Left"
    >
    <DataGrid.Columns>
        <DataGridTextColumn 
            Header="Name" 
            Binding="{Binding XPath=@Name}" 
            />
    </DataGrid.Columns>
</DataGrid>

这是我使用的XmlDataProvider:

<XmlDataProvider
    x:Key="MovieData"
    >
    <x:XData>
        <Movies xmlns="">
            <Movie Name="Movie 1">
                <Artist Name="Artist 1"/>
                <Artist Name="Artist 2"/>
                <Artist Name="Artist 3"/>
            </Movie>
            <Movie Name="Movie 2">
                <Artist Name="Artist 11"/>
                <Artist Name="Artist 22"/>
                <Artist Name="Artist 33"/>
                <Sleestak Name="Sleestak 44"/>
            </Movie>
        </Movies>
    </x:XData>
</XmlDataProvider>

答案 1 :(得分:-1)

要向艺术家展示您需要将DataGrid绑定到SelectedItem的{​​{1}}。像这个基本示例之类的东西应该可以解决问题:

ListBox