And*_*ech 27 .net c# wpf treeview xaml
关于我之前发布的问题(WPF:正确地将对象存储在TreeViewItem中)
是否可以HierarchicalDataTemplate在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;}
}
}
Run Code Online (Sandbox Code Playgroud)
XAML:
<TreeView x:Name="_treeView">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Artist}" ItemsSource="{Binding Albums}">
<TextBlock Text="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Run Code Online (Sandbox Code Playgroud)
如您所见,TreeView仅绑定艺术家及其专辑.如何修改它以包括专辑的曲目(作为专辑的子列表,即)?
Job*_*Joy 44
这里你不需要嵌套模板,因为TreeView控件将根据它需要的DataType来处理它.因此,只需为专辑和艺术家类型定义两个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>
Run Code Online (Sandbox Code Playgroud)