如何使用 LINQ to XML 执行 WPF 数据绑定 - 第二部分





0/5 (0投票)
本文是上一篇文章的第 2 部分,解释了如何使用 LINQ 将 WPF 控件绑定到存储在 XML 文件中的数据。
引言
本文档是关于如何开发一个可以绑定到使用 LINQ to XML 类存储的内联 XML 数据的 WPF 应用程序的上一篇文章的续篇。 在本文中,我讨论了如何绑定到存储在文件系统中的 XML 数据。
只需对 XAML 和代码隐藏文件进行微小的更改,就可以实现与先前示例相同的功能。
更改 1
请记住,我们在之前的示例中将 XML 数据块保存在 CDATA 部分中,并将其内联到 XAML 代码中。 通过在 Object DataProvider 中使用 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
实例。
更改 2
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>
更改 3
为了反映数据绑定方面 WPF 控件中的这些更改,标记也需要进行轻微的更改。
不再使用 Text="{Binding Path=Value}"
,现在我们需要编写 Text="{Binding Path=Element[title].Value}"
。
更改 4
同样,在现有列表中添加新书时,对“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();
完成上述更改后,运行示例代码(Window2.xaml),并查看如下输出
结论
在本文档的这一部分中,我们已经了解了为了从 WPF 应用程序绑定到外部 XML 文件,需要对上一部分进行哪些更改,并使用了 XLinq 技术。 ObjectDataProvider
是促进此 XLinq 功能的核心类,用于绑定内联和外部 XML 数据。 在示例代码应用程序中,Window1.Xaml 呈现内联 XML 数据绑定,而 Window2.Xaml 使用外部文件。 尝试一下,享受其中的不同之处。