2

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

<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)。TreeView我怎样才能不直接填充我XmlDataProvider的内容,而是填充一个List<MyViewModel>?我可以在 myDataContext中创建一个返回 a的属性List<MyViewModel>,然后将 my 绑定TreeView到该属性,但我不知道如何在 C# 属性 getter 中从XmlDataProvider. 当我使用TryFindResource并将object结果转换为时,我的资源(在 中定义)XmlDataProviderDocumentandData属性为空。versionsXml<UserControl.Resources>

4

1 回答 1

0

阅读此线程后,我执行了以下操作:

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

然后,在 C# 中访问XmlDataProvider数据,因为该Data属性不再为空:

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)
{
   ...
}
于 2010-08-25T19:35:06.683 回答