hualalalalali 2019-06-26
实现效果:
关键词:
数据源xml
数据是作为 Resources 部分内的 XML 数据岛 直接嵌入的。 XML 数据岛必须包装在 <x:XData> 标记中,并始终具有一个单一根节点,在本示例中根节点为 Inventory。
<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books"> <x:XData> <Inventory xmlns=""> <Books> <Book ISBN="0-7356-0562-9" Stock="in" Number="9"> <Title>XML in Action</Title> <Summary>XML Web Technology</Summary> </Book> <Book ISBN="0-7356-1370-2" Stock="in" Number="8"> <Title>Programming Microsoft Windows With C#</Title> <Summary>C# Programming using the .NET Framework</Summary> </Book> <Book ISBN="0-7356-1288-9" Stock="out" Number="7">
ListBox绑定xml数据及模板:
ListBox 将显示下列项。 这些项为 Books 下所有元素的 Title,其中 Stock 值为“ out”, Number 值为 3 或者大于或等于 8。
<ListBox Width="400" Height="300" Background="Honeydew"> <ListBox.ItemsSource> <Binding Source="{StaticResource InventoryData}" XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]"/> </ListBox.ItemsSource> <!--Alternatively, you can do the following. --> <!--<ListBox Width="400" Height="300" Background="Honeydew" ItemsSource="{Binding Source={StaticResource InventoryData}, XPath=*[@Stock\=\'out\'] | *[@Number>\=8 or @Number\=3]}">--> <ListBox.ItemTemplate> <DataTemplate> <TextBlock FontSize="12" Foreground="Red"> <TextBlock.Text> <Binding XPath="Title"/> </TextBlock.Text> </TextBlock> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
当运行 XPath 查询时,它将返回 XmlNode 或 XmlNode 列表。 XmlNode 是一个CLR对象,这意味着可以使用 Path 属性绑定到CLR属性。
扩展:
WPF 中的 XPath 属性是由 XmlNode.SelectNodes 方法处理的。 您可以修改 XPath 查询以获取不同的结果。
在某些应用程序中,将 XML 作为 XAML 页的源内的数据岛嵌入可能很不方便,因为在编译时必须知道该数据的确切内容。 因此,还支持从外部 XML 文件获取该数据,如下面的示例所示:
<XmlDataProvider x:Key="BookData" Source="data\bookdata.xml" XPath="Books"/>
<XmlDataProvider x:Key="BookData" Source="http://MyUrl" XPath="Books"/>
要声明 URI 与前缀之间的映射,请创建一个 XmlNamespaceMapping 类,并将该类添加到用作绑定的 XmlNamespaceManager 的 XmlNamespaceMappingCollection 对象。
关键词:
如果您的 XML 数据具有以下 XML 命名空间定义:
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1...;>
您可以使用 XmlNamespaceMapping 元素将命名空间映射到 Prefix,
<XmlNamespaceMappingCollection x:Key="Mapping"> <XmlNamespaceMapping Uri="http://purl.org/dc/elements/1.1/" Prefix="dc" /> </XmlNamespaceMappingCollection> <XmlDataProvider Source="http://msdn.microsoft.com/subscriptions/rss.xml" XmlNamespaceManager="{StaticResource Mapping}" XPath="rss/channel/item" x:Key="Provider"/> <TextBlock Grid.Row="1" Text="{Binding XPath=dc:date}" />
扩展: