Treeview 的每个级别都有不同的绑定方法

发布于 2024-12-23 10:03:25 字数 625 浏览 0 评论 0原文

我在后面的代码中生成了一个 XDocument ,如下所示:

<Root>
  <Pubs>
    <Book id='A123'>
      <Author state='AS'>Moreno</Author>
    </Book>
    <Book id='B456'>
      <Author state='BS'>Gazit</Author>
    </Book>
  </Pubs>
</Root>

并希望将其绑定到 WPF 应用程序中的 Treeview 控件以获得类似的内容:

+ Pubs              //Pubs Element Name
  + A123            //Book Element Attribute Value
    + Moreno        //Author Element Inner text
  + B456
    + Gazit

那么,最好的解决方案是什么?

I've generated an XDocument at code behind as below:

<Root>
  <Pubs>
    <Book id='A123'>
      <Author state='AS'>Moreno</Author>
    </Book>
    <Book id='B456'>
      <Author state='BS'>Gazit</Author>
    </Book>
  </Pubs>
</Root>

and want to bind this to a Treeview control in WPF application to have something like this:

+ Pubs              //Pubs Element Name
  + A123            //Book Element Attribute Value
    + Moreno        //Author Element Inner text
  + B456
    + Gazit

so, what is the best solution?

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

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

发布评论

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

评论(3

故事和酒 2024-12-30 10:03:25

您应该将每个元素反序列化为适当的对象,然后从可观察的集合中构建树层次结构。

您应该阅读有关使用 MVVM 的 WPF TreeView 的内容。本教程非常好 -

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel .aspx

You should deserialize each of these elements into a proper object, and then build a tree hierarchy out of observable collections.

You should read about WPF TreeView using MVVM. This tutorial is pretty good -

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

書生途 2024-12-30 10:03:25

在您的(控件、窗口或应用程序)资源中定义一个以 Book 作为 DataType 的 DataTemplate,并将 TreeView 绑定到您的 Book 列表可能会完成这项工作。

Defining in your (control or window or application) resources a DataTemplate having Book as DataType, and binding a TreeView to your list of Book might do the job.

风启觞 2024-12-30 10:03:25

这就是答案:

对于 TreeView 的每个级别,我们必须在 TreeView.Resources 中定义一个特定的HierarchicalDataTemplate,其中包含:

  1. DataType > = 元素名称
  2. ItemsSource = 绑定子名称

,如下所示:

  <TreeView Name="treeView2"   ItemsSource="{Binding Path=Root.Elements}">
            <TreeView.Resources>

                <HierarchicalDataTemplate DataType="Book" ItemsSource="{Binding Path=Elements}" x:Key="template1">
                        <TextBlock Text="{Binding Path='Attribute[id].Value'}"/>
                </HierarchicalDataTemplate>

                <HierarchicalDataTemplate DataType="Pubs" ItemsSource="{Binding Path=Elements}" x:Key="template2">
                        <TextBlock Text="{Binding Path='Name'}"/>
                </HierarchicalDataTemplate>

                <HierarchicalDataTemplate DataType="Author" x:Key="template3">
                        <TextBlock Text="{Binding Path='Attribute[state].Value'}"/>
                </HierarchicalDataTemplate>

        </TreeView.Resources>
    </TreeView>

一切正常!

This Is the Answer:

For each Level of TreeView we must define a specificHierarchicalDataTemplate in TreeView.Resources with:

  1. DataType = element name
  2. ItemsSource = binding child name

for example as below:

  <TreeView Name="treeView2"   ItemsSource="{Binding Path=Root.Elements}">
            <TreeView.Resources>

                <HierarchicalDataTemplate DataType="Book" ItemsSource="{Binding Path=Elements}" x:Key="template1">
                        <TextBlock Text="{Binding Path='Attribute[id].Value'}"/>
                </HierarchicalDataTemplate>

                <HierarchicalDataTemplate DataType="Pubs" ItemsSource="{Binding Path=Elements}" x:Key="template2">
                        <TextBlock Text="{Binding Path='Name'}"/>
                </HierarchicalDataTemplate>

                <HierarchicalDataTemplate DataType="Author" x:Key="template3">
                        <TextBlock Text="{Binding Path='Attribute[state].Value'}"/>
                </HierarchicalDataTemplate>

        </TreeView.Resources>
    </TreeView>

and everything is ok!

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