在 TreeView 中有 HierarchicalDataTemplates

Posted

技术标签:

【中文标题】在 TreeView 中有 HierarchicalDataTemplates【英文标题】:Having HierarchicalDataTemplates in a TreeView 【发布时间】:2010-10-17 16:53:34 【问题描述】:

关于我之前在 (WPF: Correctly storing an object in a TreeViewItem) 上发布的一个问题

是否可以在 TreeView 中嵌套 HierarchicalDataTemplates?


举个例子:

代码:

public class Artist

        private readonly ICollection<Album> _children = new ObservableCollection<Album>();
        public string Name  get; set; 

        public ICollection<Album> Albums
        
            get  return _children;
        


public class Album

        private readonly ICollection<Track> _children = new ObservableCollection<Track>();
        public string Name  get; set; 

        public ICollection<Track> Tracks
        
            get  return _children;
        

Xaml:

<TreeView x:Name="_treeView">
        <TreeView.Resources>
                <HierarchicalDataTemplate DataType="x:Type local:Artist" ItemsSource="Binding Albums">
                        <TextBlock Text="Binding Name"/>
                </HierarchicalDataTemplate>
        </TreeView.Resources>
</TreeView>

从上面可以看出,TreeView 只是绑定艺术家和他们的专辑。如何修改它以包含专辑的曲目(作为专辑的子列表,即)?

【问题讨论】:

【参考方案1】:

这里不需要嵌套模板,因为 TreeView 控件会根据它所需的 DataType 负责嵌套它。因此,只需为专辑和艺术家类型定义两个 HierarchicalDataTemplate,为您的 Track 类定义一个普通 DataTemplate。

   <HierarchicalDataTemplate  DataType="x:Type local:Artist" ItemsSource="Binding Albums" >          
         <TextBlock Text="Binding Name"/>                 
    </HierarchicalDataTemplate>
    <HierarchicalDataTemplate  DataType="x:Type local:Album" ItemsSource="Binding Tracks" >
        <TextBlock Text="Binding Name"/>
    </HierarchicalDataTemplate>        
    <DataTemplate DataType="x:Type local:Track">
        <TextBlock Text="Binding Name"/>
    </DataTemplate>

【讨论】:

非常好,正是我想要的。谢谢你的回答。 现在的问题是,如果我的 treeview itemssource 是 XmlDataProvider 并且我想要根据各自节点中定义的属性不同的模板,该怎么做 您可以在这些模板中 DataTrigger 该属性

以上是关于在 TreeView 中有 HierarchicalDataTemplates的主要内容,如果未能解决你的问题,请参考以下文章

WPF 从 TreeView 中删除 ScrollViewer

在 Avalonia 中实现 TreeView 节点的拖放

Treeview selectedItem 在启动时突出显示

TreeView 项目更改事件

treeview 如何展开选中的节点,其它节点收缩。

在 C# winforms 应用程序中使用文本框过滤 Treeview