WPF,C#中从XmlDataProvider读取数据

发布于 2024-09-15 15:58:26 字数 1297 浏览 5 评论 0原文

我想要一个带有复选框的 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 填充我的 TreeView?我可以在 DataContext 中创建一个返回 List 的属性,然后将我的 TreeView 绑定到该属性,但我不这样做了解如何在 C# 属性 getter 中从 XmlDataProvider 读取 XML 数据。当我使用 TryFindResource 并将 object 结果转换为 XmlDataProvider 时,DocumentData > 我的 versionsXml 资源(在 中定义)的属性为 null。

I want a TreeView with checkboxes and I'm trying to follow this tutorial. However, in it, he creates all his content for the TreeView at runtime. I have an XML file that I have accessible as an XmlDataProvider in my XAML:

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

I have a view model class with IsChecked and Name properties, and I want to use this to represent nodes in my XML:

<Versions>
  <Version name="1.0">
    <Version name="1.0.001" />
    <Version name="1.0.002" />
  </Version>
</Versions>

My TreeView will display leaf nodes (i.e., 1.0.001 and 1.0.002) with a checkbox. How can I populate my TreeView with not the XmlDataProvider's content directly, but rather a List<MyViewModel>? I can create a property in my DataContext that returns a List<MyViewModel>, then bind my TreeView to that property, but I don't know how, in a C# property getter, to read in the XML data from the XmlDataProvider. When I use TryFindResource and cast the object result to XmlDataProvider, the Document and Data properties are null for my versionsXml resource (defined in <UserControl.Resources>).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烛影斜 2024-09-22 15:58:26

阅读此帖子,我执行了以下操作:

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

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

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

After reading this thread, I did the following:

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

Then, in C# to access the XmlDataProvider data since the Data property was no longer null:

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)
{
   ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文