[英]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.