XmlDataProvider
提供了一种简单的方式绑定到一段XML,无论这段XML在内存中的片段或一个完成文件中。
<Page.Resources>
<XmlDataProvider x:Key="xmlData" XPath="Images">
<!-- 数据岛包含在x:XData标记中 -->
<x:XData>
<!-- XML 数据岛 -->
<!-- 用空xmlns标记XML根节点,否则会被默认命名空间影响,XPath查询无法工作 -->
<Images xmlns="">
<Image ID="1">
<Name>a.jpg</Name>
<Image ID="3">
<Name>c.jpg</Name>
</Image>
</Image>
<Image ID="2">
<Name>b.jpg</Name>
</Image>
</Images>
</x:XData>
</XmlDataProvider>
<!-- XML文件位于一个独立文件中 -->
<XmlDataProvider x:Key="xmlData2" XPath="Images" Source="Images.xml" />
<!-- 将整个XML数据绑定到一个可以理解层次结构TreeView或Menu的元素上 -->
<!-- 绑定XML的根节点Images样式模板 -->
<!-- 未定义显示x:Key,因为默认以DataType值做了资源键名 -->
<!-- DataType对应XML元素名称 -->
<HierarchicalDataTemplate DataType="Images" ItemsSource="{Binding XPath=*}">
<TextBlock Text="All Images" Background="DeepPink"/>
</HierarchicalDataTemplate>
<!-- 绑定XML的子节点Image样式模板 -->
<HierarchicalDataTemplate DataType="Image" ItemsSource="{Binding XPath=*}">
<TextBlock FontWeight="Bold" Text="{Binding XPath=.}"/>
</HierarchicalDataTemplate>
<!-- 绑定XML元素Image的子节点Name样式模板 -->
<DataTemplate DataType="Name">
<TextBlock Foreground="CornflowerBlue" Text="{Binding XPath=.}"/>
</DataTemplate>
</Page.Resources>
<StackPanel>
<ListBox ItemsSource="{Binding Source={StaticResource xmlData2}, XPath=Image/Name}"/>
<TreeView ItemsSource="{Binding Source={StaticResource xmlData},XPath=.}"/>
<Menu ItemsSource="{Binding Source={StaticResource xmlData},XPath=.}" />