我正在尝试根据选择动态更改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>
答案 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