首页 / 软件开发 / .NET编程技术 / WPF学习笔记 - 12. Binding (5)
WPF学习笔记 - 12. Binding (5)2010-10-11 rainsts.net yuhen10. 数据提供程序(1) XmlDataProviderXmlDataProvider 允许我们直接将 XML 数据作为数据源,我们将前面章节的例子改成 XML 数据岛试试,注意此时我们已经不需要在代码中定义 Personal、PersonalList 类型。<Window x:Class="Learn.WPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
<XmlDataProvider x:Key="personals" XPath="Personals">
<x:XData>
<Personals xmlns="">
<Personal Name="Tom" Age="15" Sex="Male" />
<Personal Name="Mary" Age="11" Sex="Female" />
<Personal Name="Jack" Age="12" Sex="Male" />
</Personals>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<Grid>
<StackPanel DataContext="{StaticResource personals}">
<ListBox x:Name="listbox1" ItemsSource="{Binding XPath=*}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding XPath=@Name}" />
<TextBlock>,</TextBlock>
<TextBlock Text="{Binding XPath=@Age}" />
<TextBlock>,</TextBlock>
<TextBlock Text="{Binding XPath=@Sex}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</Window>
在资源中定义 XML 数据岛,注意 "Personals xmlns" 不能省略,另外采用 XPath 进行了绑定操作 (XPath 的语法可参考 MSDN 文档)。除了使用数据岛,我们还以使用 XML 数据文件。Window1.xaml<Window x:Class="Learn.WPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:Learn.WPF"
Title="Window1">
<Window.Resources>
<XmlDataProvider x:Key="personals" Source="pack://siteOfOrigin:,,,/Personals.xml"
XPath="Personals" />
</Window.Resources>
<Grid>
<StackPanel DataContext="{StaticResource personals}">
<ListBox x:Name="listbox1" ItemsSource="{Binding XPath=*}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding XPath=@Name}" />
<TextBlock>,</TextBlock>
<TextBlock Text="{Binding XPath=@Age}" />
<TextBlock>,</TextBlock>
<TextBlock Text="{Binding XPath=@Sex}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Grid>
</Window>