案例地址:GitHub - microsoft/WPF-Samples: Repository for WPF related samples
一、运行界面
二、案例功能描述
实现XML数据的主-从方案
知识点:
1、XPath:使用XPath指明Binding XML路径,路径后使用@符号加字符串表示的是XML元素的Attribute,不加@的字符串表示的是子级元素。
2、 Selector.IsSynchronizedWithCurrentItem:
三、分析代码
1、获取XmlDataProvider
- XmlDataProvider.Source : .xml文件路径
- XmlDataProvider.XPath: 数据节点
<XmlDataProvider x:Key="MyList" Source="Data\Leagues.xml"
XPath="Leagues/League"/>
2、设置数据模板
<DataTemplate x:Key="DataTemplateX">
<TextBlock Text="{Binding XPath=@name}" />
</DataTemplate>
3、设置上下文,绑定XmlDataProvider
<DockPanel DataContext="{Binding Source={StaticResource MyList}}">
4、设置主从关系,将下一级的上下文设置为上一级的属性
<StackPanel>
<Label>My Soccer Leagues</Label>
<ListBox ItemsSource="{Binding}"
ItemTemplate="{StaticResource DataTemplateX}"
IsSynchronizedWithCurrentItem="true"/>
</StackPanel>
<StackPanel>
<Label Content="{Binding XPath=@name}"/>
<ListBox Name="divisionsListBox"
ItemsSource="{Binding XPath=Division}"
ItemTemplate="{StaticResource DataTemplateX}"
IsSynchronizedWithCurrentItem="true"/>
</StackPanel>
<StackPanel>
<Label Content="{Binding XPath=@name}"
DataContext="{Binding ElementName=divisionsListBox,
Path=SelectedItem}"/>
<ListBox DataContext="{Binding ElementName=divisionsListBox,
Path=SelectedItem}"
ItemsSource="{Binding XPath=Team}"
ItemTemplate="{StaticResource DataTemplateX}"/>
</StackPanel>