首先,定义一个XML文件,存放一组学生的信息,将其存放在D:\Test.XML中,我们把它显示在一个ListView样式中。
<?xml version="1.0" encoding="utf-8"?>
<StudentList>
<Student Id="1">
<Name="张?三¨y"/>
</Student>
<Student Id="2">
<Name="李¤?四?"/>
</Student>
<Student Id="3">
<Name="王ª?五?"/>
</Student>
</StudentList>
XMAL文件如下:
<Window x:Class="_6_20.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListView ItemsSource="{Binding}">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" Width="80" DisplayMemberBinding="{Binding XPath=@Id}"/>
<GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding XPath=Name}"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
XmlDocument doc = new XmlDocument();
doc.Load(@"D:\Test.xml");
XmlDataProvider xdp = new XmlDataProvider();
xdp.Document = doc;
xdp.XPath = @"StudentList/Student";
this.listview.DataContext = xdp;
}
}
这里最主要的几点如下:
1、ListView的ItemsSource必须要设置空的Binding,这样设置之后,Binding会自动在listview对象的DataContext中查找默认的集合类对象,并赋值给ItemsSource。
2、DisplayMemberBinding="{Binding XPath=@Id}",使用@符号表示XML元素的Attribute
3、DisplayMemberBinding="{Binding XPath=Name}",没有使用@符号表示XML元素的子元素。
4、特别XmlDataProvider还有一个 Source属性,可以不使用XmlDocument而直接加载XML文件:
以上代码还可写成:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
XmlDataProvider xdp = new XmlDataProvider();
xdp.Source = new System.Uri(@"D:\Test.xml");
xdp.XPath = @"StudentList/Student";
this.listview.DataContext = xdp;
}
}
运行效果如下: