2017-05-28 76 views
-1

我想基于选择动态更改xml数据绑定。基于选择WPF XML数据绑定

列表框与电影名称绑定并基于电影名称的选择我需要在数据网格中对应的艺术家名称。

例子 - 如果我们选择剧场1然后我需要显示艺术家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 [email protected]}" 
      /> 
    </DataGrid.Columns> 
</DataGrid> 

回答

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 [email protected]}" 
      /> 
    </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

谢谢Ed Plunkett。它正在工作。我得到了如何解决它。 – superuser

+0

@superuser真棒。在WPF控件中使用XML并不好玩。 –

+0

@ Ed Plunkett这是否是有效的解决方案? – superuser

-1

要显示你需要的DataGrid绑定到ListBoxSelectedItem的艺术家。像这个基本的例子应该做的伎俩:

<ListBox x:Name="ListBox_Movies" 
     DataContext="{StaticResource MovieData}" 
     ItemsSource="{Binding XPath=/Movies/Movie/@Name}"/> 
<DataGrid ItemsSource="{Binding ElementName=ListBox_Movies, Path=SelectedItem}"/> 
+0

感谢Fruchtzwerg的回答,但它不工作。艺术家节点没有绑定到基于列表框选择的数据网格 – superuser

+0

也许还有其他一些问题(绑定好吗?),我几秒钟前运行了代码。 – Fruchtzwerg

+0

我们可以使用WPF数据绑定来实现解决方案还是需要编写自定义逻辑 – superuser