WPF TreeView-Bindung

.net data-binding entity-framework linq wpf

Frage

Ich habe eine Klasse mit Eltern- und Kindereigenschaften.

Hierarchische Seitenklasse von ADO.NET Entity Framework http://img148.imageshack.us/img148/6802/edmxxe8.gif

Ich möchte diese Hierarchie in einer WPF-Baumansicht anzeigen.

Hier ist mein XAML ...

<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Path=ShortTitle}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Und mein VB-Code ...

Dim db As New PageEntities
Dim t = From p In db.Page.Include("Children") _
        Where p.Parent Is Nothing _
        Select p
TreeViewPages.ItemsSource = t

Aber dann bekomme ich nur einen Baum zwei Ebenen tief. Was muss ich tun, damit das funktioniert?

Akzeptierte Antwort

Der Grund, warum dies nicht funktioniert, besteht darin, dass Sie nur die DataTemplate für die TreeView angeben. Da die TreeViewItems, die es generiert, auch ItemsControls sind, müssten auch die ItemTemplate gesetzt sein.

Der einfachste Weg, um das zu erreichen, was Sie sich erhoffen, besteht darin, das HierarchicalDataTemplate in die Ressourcen der TreeView (oder eines seiner übergeordneten Visuals) aufzunehmen und den Datentyp des HierarchicalDataTemplate so festzulegen, dass er auf alle Ihre Elemente angewendet wird.

In der Deklaration Ihres Containers (höchstwahrscheinlich Fenster) müssen Sie eine Zuordnung zu dem Namespace definieren, in dem die Seite definiert ist.

z.B

<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>


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum