English 中文(简体)
在树视图中具有层次结构数据模板
原标题:
  • 时间:2009-04-05 20:19:41
  •  标签:

关于我早些时候发布的一个问题(WPF:将对象正确存储在TreeViewItem中

是否可以在TreeView中嵌套层次结构数据模板


以以下示例为例:

代码:

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

最佳回答

这里不需要嵌套模板,因为TreeView控件将根据它所需的DataType来嵌套它。因此,只需为Album和Artist Type定义两个层次结构数据模板,为Track类定义一个普通数据模板。

   <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>
问题回答

暂无回答




相关问题