[英]WPF, read data from XmlDataProvider in C#
我想要一个带复选框的TreeView
,我正在尝试遵循本教程 。 但是,在其中,他在运行时为TreeView
创建了所有内容。 我有一个XML文件,可以在XAML中作为XmlDataProvider
访问:
<XmlDataProvider Source="XmlData/Versions.xml" XPath="//*[count(*)=0]"
x:Key="versionsXml" />
我有一个具有IsChecked
和Name
属性的视图模型类,并且我想用它来表示XML中的节点:
<Versions>
<Version name="1.0">
<Version name="1.0.001" />
<Version name="1.0.002" />
</Version>
</Versions>
我的TreeView
将显示带有复选框的叶节点(即1.0.001和1.0.002)。 如何不直接使用XmlDataProvider
的内容而是使用List<MyViewModel>
填充TreeView
? 我可以在DataContext
中创建一个返回List<MyViewModel>
属性,然后将TreeView
绑定到该属性,但是我不知道如何在C#属性获取器中从XmlDataProvider
读取XML数据。 当我使用TryFindResource
并将object
结果TryFindResource
为XmlDataProvider
,我的versionsXml
资源(在<UserControl.Resources>
定义)的Document
和Data
属性为null。
阅读此线程后 ,我执行了以下操作:
<XmlDataProvider Source="XmlData/Versions.xml" XPath="//*[count(*)=0]"
x:Key="versionsXml" IsInitialLoadEnabled="True"
IsAsynchronous="False" />
然后,由于Data
属性不再为null,因此在C#中访问XmlDataProvider
数据:
var versions = new List<MyViewModel>();
var dataProvider = TryFindResource("versionsXml") as XmlDataProvider;
if (null == dataProvider)
{
return versions;
}
var nodes = dataProvider.Data as IEnumerable;
if (null == nodes)
{
return versions;
}
foreach (XmlElement node in nodes)
{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.