【问题标题】:Having HierarchicalDataTemplates in a TreeView在 TreeView 中有 HierarchicalDataTemplates
【发布时间】: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 只是绑定艺术家和他们的专辑。如何修改它以包含专辑的曲目(作为专辑的子列表,即)?

【问题讨论】:

    标签: c# .net wpf xaml 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 该属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多