WPF TreeView Binding

.net data-binding entity-framework linq wpf

Pregunta

Tengo una clase con propiedades para padres e hijos.

ADO.NET Entity Framework Hierarchical Page Class http://img148.imageshack.us/img148/6802/edmxxe8.gif

Quiero mostrar esta jerarquía en una vista de árbol de WPF.

Aquí está mi XAML ...

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

Y mi código 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

Pero luego solo consigo un árbol de dos niveles de profundidad. ¿Qué necesito hacer para que esto funcione?

Respuesta aceptada

La razón por la que esto no funciona es que solo está especificando el DataTemplate para el TreeView. Dado que los TreeViewItems que genera también son ItemsControls, también deberían tener el ItemTemplate establecido.

La forma más fácil de lograr lo que está esperando es colocar el HierarchicalDataTemplate en los recursos del TreeView (o cualquiera de sus elementos visuales principales), y establecer el DataType del HierarchicalDataTemplate para que se aplique a todos sus elementos.

En la declaración de su contenedor (ventana más probable), debe definir una asignación al espacio de nombres donde se define la página.

p.ej

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué