c# - 在 TreeView 中使用 HierarchicalDataTemplates

标签 c# .net wpf xaml treeview

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

是否可以在 TreeView 中嵌套 HierarchicalDataTemplate


举个例子:

代码:

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 仅绑定(bind)艺术家及其专辑。我如何修改它以包括专辑的轨道(作为专辑的子列表,即)?

最佳答案

此处不需要嵌套模板,因为 TreeView 控件会根据所需的数据类型负责嵌套模板。因此,只需为 Album 和 Artist Type 定义两个 HierarchicalDataTemplates,并为您的 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>

关于c# - 在 TreeView 中使用 HierarchicalDataTemplates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/719609/

相关文章:

c# - try catch 数字增量

c# - 使用Data Virtualization,ViewModel中的属性与View中ItemsControl的SelectedItem绑定(bind)的问题

c# - 用 string[] 做包含的最快方法

c# - 在应用 Mode-View-ViewModel 设计模式时包括部分 View

C# - DataTable.Merge() 是否添加重复项或更新?

.net - 如果 DataGrid 列已排序(而不是排序),我如何收到通知

wpf - 默认情况下,ListBox 是虚拟的?

c# - 如果我不关心它的返回值,我应该等待一个 'async Task' 函数吗?

c# - 数组或迭代器 - 对于返回一个/两个元素的调用具有更好的性能特征(内存方面)

c# - 为什么我不能在 WebForm 中声明 UserControl 的子元素(属性)?