Liaison TreeView WPF

.net data-binding entity-framework linq wpf

Question

J'ai un cours avec les propriétés Parent et Children.

Classe de page hiérarchique ADO.NET Entity Framework http://img148.imageshack.us/img148/6802/edmxxe8.gif

Je souhaite afficher cette hiérarchie dans une arborescence WPF.

Voici mon XAML ...

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

Et mon code 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

Mais alors je n’obtiens qu’un arbre à deux niveaux de profondeur. Que dois-je faire pour que cela fonctionne?

Réponse acceptée

La raison pour laquelle cela ne fonctionne pas, c'est que vous spécifiez uniquement le DataTemplate pour TreeView. Étant donné que les TreeViewItems qu'il génère sont aussi des ItemsControls, ils devraient également avoir le ItemTemplate défini.

Le moyen le plus simple de réaliser ce que vous espérez est de placer le HierarchicalDataTemplate dans les ressources du TreeView (ou de l'un de ses visuels parents) et de définir le DataType du HierarchicalDataTemplate pour qu'il soit appliqué à tous vos éléments.

Dans la déclaration de votre conteneur (fenêtre la plus probable), vous devez définir un mappage vers l'espace de noms dans lequel la page est définie.

par exemple

<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

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow