Наличие HierarchicalDataTemplates в TreeView - PullRequest
27 голосов
/ 06 апреля 2009

Что касается вопроса, который я опубликовал ранее ( 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 Ответ

44 голосов
/ 06 апреля 2009

Здесь вам не нужен вложенный шаблон, поскольку элемент управления TreeView позаботится о его вложении на основе требуемого типа данных. Так что просто определите две HierarchicalDataTemplates для альбома и типа исполнителя и один обычный 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...