簡體   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