关于我之前发布的一个问题(WPF:在 TreeViewItem 中正确存储对象 https://stackoverflow.com/questions/718858/wpf-correctly-storing-an-object-in-a-treeviewitem/718895#718895)
是否可以嵌套HierarchicalDataTemplate
在 TreeView 中?
举个例子:
Code:
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 来处理嵌套模板。因此,只需为专辑和艺术家类型定义两个 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)