2010-08-25 99 views
2

我想要一個帶有複選框的TreeView,我正在嘗試關注this tutorial。但是,他在運行時爲TreeView創建了所有內容。我有我在我的XAML的XmlDataProvider訪問的XML文件:WPF,從C#中的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)。如何直接填寫我的TreeView而不是XmlDataProvider的內容,而是使用List<MyViewModel>?我可以在我的DataContext中創建一個屬性,該屬性返回List<MyViewModel>,然後將我的TreeView綁定到該屬性,但我不知道如何在C#屬性獲取器中讀取XmlDataProvider中的XML數據。當我使用TryFindResource並將object結果投射到XmlDataProvider時,Document和屬性對於我的versionsXml資源(在<UserControl.Resources>中定義)爲空。

回答

0

閱讀this thread後,我做了以下內容:

<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) 
{ 
    ... 
}