关于我之前在 ( 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/