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

时间:2011-12-29 06:16:57

标签: c# wpf xml linq-to-xml

我在代码后面生成了 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

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

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

在您的(控件或窗口或应用程序)资源中定义具有Book作为DataType的DataTemplate,并将TreeView绑定到Book列表可能会起作用。

答案 2 :(得分:2)

这就是答案:

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

  1. DataType =元素名称
  2. ItemsSource =绑定子名称
  3. 例如如下:

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

    一切都好!