Привязка WPF TreeView

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

http://img148.imageshack.us/img148/6802/edmxxe8.gif

Я хочу отобразить эту иерархию в виде дерева WPF.

Вот мой XAML ...

<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type Page}" ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Path=ShortTitle}" />
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</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

Но я получаю дерево с одним элементом, не являющимся шаблоном:

PageManager.Page

Что мне нужно сделать, чтобы это заработало?


person Zack Peterson    schedule 07.11.2008    source источник
comment
См. Соответствующий вопрос: stackoverflow.com/questions/269523/   -  person Zack Peterson    schedule 07.11.2008


Ответы (1)


Вам необходимо определить сопоставление xmlns с вашим классом Page в файле XAML и использовать его в объявлении типа. Причина, по которой вы не получаете ошибку компиляции, заключается в том, что класс Page уже определен в WPF.

Итак, если ваш класс Page был определен в пространстве имен Zack в сборке TreeViewBinding, вам нужно будет добавить следующее объявление в родительский контейнер (скорее всего, Window):

xmlns:local="clr-namespace:Zack;assembly=TreeViewBinding"

А затем измените свой DataTemplate следующим образом:

<HierarchicalDataTemplate DataType="{x:Type local:Page}" ItemsSource="{Binding Children}">

Уточню свой пост по вашему исходному вопросу.

person Abe Heidebrecht    schedule 07.11.2008
comment
предыдущий вопрос: stackoverflow.com/questions/272854/wpf-treeview-binding - person Zack Peterson; 07.11.2008