WPF TreeView Binding

.net data-binding entity-framework linq wpf

Вопрос

У меня есть класс со свойствами Parent и Children.

Класс иерархической страницы ADO.NET Entity Framework http://img148.imageshack.us/img148/6802/edmxxe8.gif

Я хочу отобразить эту иерархию в виде дерева 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>


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему