Наличие иерархических шаблонов в TreeView
Что касается вопроса, который я опубликовал ранее (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;}
}
}
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 привязывает только художников и их альбомы. Как я могу изменить его, чтобы включить также треки альбомов (в качестве подписок для альбомов, т.е.)?
Ответы
Ответ 1
Вам не нужен вложенный шаблон здесь, так как элемент управления TreeView позаботится о его вложенности на основе требуемого DataType. Поэтому просто определите Two HierarchicalDataTemplates для альбома и типа исполнителя и один обычный DataTemplate для вашего класса 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>