繁体   English   中英

WPF,从C#中的XmlDataProvider读取数据

[英]WPF, read data from XmlDataProvider in C#

我想要一个带复选框的TreeView ,我正在尝试遵循本教程 但是,在其中,他在运行时为TreeView创建了所有内容。 我有一个XML文件,可以在XAML中作为XmlDataProvider访问:

<XmlDataProvider Source="XmlData/Versions.xml" XPath="//*[count(*)=0]"
                 x:Key="versionsXml" />

我有一个具有IsCheckedName属性的视图模型类,并且我想用它来表示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结果TryFindResourceXmlDataProvider ,我的versionsXml资源(在<UserControl.Resources>定义)的DocumentData属性为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM