Wpf Xaml - TreeView 分层数据模板 - 多个项目源

Posted

技术标签:

【中文标题】Wpf Xaml - TreeView 分层数据模板 - 多个项目源【英文标题】:Wpf Xaml - TreeView Hierarchical Data Templates - multiple item sources 【发布时间】:2011-07-22 12:55:18 【问题描述】:

我有一个这样的类(描述 C# 中的类及其字段、方法等):

public class CSharpType

    public string Name  get; private set;   
    public List<CSharpMethod> Methods  get; private set; 
    public List<CSharpField> Fields  get; private set; 
    public List<CSharpProperty> Properties  get; private set; 
    ....

返回的 CSharppType 集合:

   public List<CSharpType> TypeCollection
    
        get
        
            TypeCollection kolekcjaTypow = metricsCollection.Types;
            Dictionary<string, CSharpType> typy = kolekcjaTypow.TypeDictionary;
            var result = typy.Values.ToList();
            return result;
        
    

每个字段、方法、属性都有一个“名称”属性 我想要 TreeView(例如):

Person
     + Fields
       + field1 name from Fields collection
       + field2 name from Fields collection
       ...
     + Methods
       ....
     + Properties

xaml 应该是什么样子?感谢您的帮助

【问题讨论】:

您查看过msdn.microsoft.com/en-us/library/… 的示例 XAML 吗? 是的。那是我的 TreeView: 【参考方案1】:

如果类如下:

public class FatherClass

    public string Name  get; set; 
    public List<ChildClass> Children  get; set; 


public class ChildClass

    public string Name  get; set; 

在窗口的ctor中,我有以下数据:

        List<FatherClass> list = new List<FatherClass>();

        list.Add(new FatherClass  Name = "First Father" );
        list.Add(new FatherClass  Name = "Second Father" );

        list[0].Children = new List<ChildClass>();
        list[1].Children = new List<ChildClass>();

        list[0].Children.Add(new ChildClass  Name = "FirstChild" );
        list[0].Children.Add(new ChildClass  Name = "SecondChild" );
        list[1].Children.Add(new ChildClass  Name = "ThirdChild" );
        list[1].Children.Add(new ChildClass  Name = "ForthChild" );

        this.DataContext = list;

那么为了创建分层数据绑定,您应该在资源中定义两个分层数据模板以“捕获”相关数据类型,如下所示:

    <Grid.Resources>
        <HierarchicalDataTemplate DataType="x:Type  my:FatherClass" ItemsSource="Binding Children" >
            <TreeViewItem Header="Binding Name" />
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="x:Type my:ChildClass"  >
            <TreeViewItem Header="Binding Name" />

        </HierarchicalDataTemplate>
    </Grid.Resources>

然后,树视图的语法应该是:

    <TreeView ItemsSource="Binding ">

    </TreeView>

【讨论】:

以上是关于Wpf Xaml - TreeView 分层数据模板 - 多个项目源的主要内容,如果未能解决你的问题,请参考以下文章

WPF TreeView绑定xaml的写法(转)

wpf如何将一个TreeView绑定到另一个TreeView

wpf中怎么为treeview动态添加子菜单

重写TreeView模板来实现数据分层展示

wpf treeview 数据绑定 递归绑定节点

Windows 窗体 TreeView - 绑定分层递归数据源