如何:绑定到 XDocument、XElement 或 LINQ for XML 查询结果
更新: 2008 年 7 月
本示例演示如何使用 XDocument 将 XML 数据绑定到 ItemsControl。
示例
下面的 XAML 代码定义了一个 ItemsControl,并包含了一个用于 http://planetsNS XML 命名空间中 Planet 类型的数据的数据模板。占用命名空间的 XML 数据类型必须包含相应的命名空间并用大括号将其括起来,并且,如果它出现在可能出现 XAML 标记扩展的位置,则还必须在相应命名空间前加上大括号转义序列。此代码绑定到与 XElement 类的 Element 和 Attribute 方法对应的动态属性。借助动态属性,XAML 可以绑定到共用方法名的动态属性。若要了解更多信息,请参见 LINQ to XML 动态属性。请注意 XML 的默认命名空间声明为何不适用于属性名。
<StackPanel Name="stacky">
<StackPanel.Resources>
<DataTemplate DataType="{}{http://planetsNS}Planet" >
<StackPanel Orientation="Horizontal">
<TextBlock Width="100" Text="{Binding Path=Element[{http://planetsNS}DiameterKM].Value}" />
<TextBlock Width="100" Text="{Binding Path=Attribute[Name].Value}" />
<TextBlock Text="{Binding Path=Element[{http://planetsNS}Details].Value}" />
</StackPanel>
</DataTemplate>
</StackPanel.Resources>
...
<ItemsControl
ItemsSource="{Binding }" >
</ItemsControl>
</StackPanel>
下面的 C# 代码调用 Load 并将堆叠面板数据上下文设置为 http://planetsNS XML 命名空间中名为 SolarSystemPlanets 的元素的所有子元素。
planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
可以使用 ObjectDataProvider 将 XML 数据存储为 XAML 资源。有关完整示例,请参见L2DBForm.xaml 源代码。下面的示例说明了代码如何将数据上下文设置为对象资源。
planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
映射到 Element 和 Attribute 的动态属性在 XAML 内提供了灵活性。代码还可以绑定到 LINQ for XML 查询的结果。本示例绑定到按元素值排序的查询结果。
stacky.DataContext =
from c in planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
orderby Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
select c;
请参见
任务
概念
修订记录
日期 |
History |
原因 |
---|---|---|
2008 年 7 月 |
新增主题。 |
信息补充。 |