在本文中,将探讨如何开发一个WPF应用程序,该程序能够使用LINQto XML类绑定到存储在文件系统中的XML数据。这需要在XAML和代码后台进行一些微小的更改,以便实现与之前示例中相同的功能。
请记住,在之前的示例中将XML数据块放在了CDATA部分,与XAML代码内联。通过在ObjectDataProvider中使用MethodName="Parse",这个XML数据被解析并存储为XElement实例。现在,让来看一下新的XAML标记中的资源部分。
<ObjectDataProvider x:Key="LoadedBooks" ObjectType="{x:Type xlinq:XElement}" MethodName="Load">
<ObjectDataProvider.MethodParameters>
<system:String>d:\bala\mydata.xml</system:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
在上面的标记中,通过使用MethodName="Load"并指定XML文件的位置(路径),创建了XElement实例。
XML数据存储在mydata.xml文件中。这个XML数据本身与在之前示例中内联使用的数据不同。它有一个带有“id”属性和“title”元素的书籍列表。
<books xmlns="">
<book id="1">
<title>Welcome, Home!</title>
</book>
<book id="2">
<title>Star Letters</title>
</book>
<book id="3">
<title>Pink and Blue</title>
</book>
<book id="4">
<title>Pirates of the Indian Ocean</title>
</book>
</books>
为了反映数据绑定方面的这些更改,WPF控件的标记也略有变化。不再是Text="{Binding Path=Value}",现在需要编写为Text="{Binding Path=Element[title].Value}"。
在添加现有列表中的新书籍时,需要对处理程序“OnAddBook”进行以下更改:
XElement newBook = new XElement(mybooks + "book", new XAttribute("id", tbAddID.Text));
newBook.Add(new XElement("title", tbAddValue.Text));
bookList.LastNode.AddAfterSelf("", newBook, "\r\n");
lbBooks.Items.Refresh();