У меня есть класс со свойствами Parent и Children.
Я хочу отобразить эту иерархию в виде дерева WPF.
Вот мой XAML ...
<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Path=ShortTitle}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
И мой код VB ...
Dim db As New PageEntities Dim t = From p In db.Page.Include("Children") _ Where p.Parent Is Nothing _ Select p TreeViewPages.ItemsSource = t
Но тогда я получаю дерево только на два уровня глубиной. Что мне нужно сделать, чтобы это работало?
Причина, по которой это не работает, заключается в том, что вы указываете только шаблон данных для TreeView. Поскольку генерируемые им TreeViewItems также являются ItemsControls, им также необходимо установить ItemTemplate.
Самый простой способ добиться того, на что вы надеетесь, - это поместить HierarchicalDataTemplate в ресурсы TreeView (или любого из его родительских визуалов) и установить DataType для HierarchicalDataTemplate, чтобы он применялся ко всем вашим элементам.
В объявлении вашего контейнера (скорее всего, в окне) вам необходимо определить отображение в пространство имен, в котором определена страница.
например
<Window ...
xmlns:local="clr-namespace:NamespaceOfPageClass;assembly=AssemblyWherePageIsDefined">
<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}" />
<TreeView.Resources>
<HierarchicalDataTemplate DataType=â€{x:Type local:Page}†ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Path=ShortTitle}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>