8

我有一个带有 Parent 和 Children 属性的类。

ADO.NET 实体框架分层页面类 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 作为新的 PageEntities
Dim t = From p In db.Page.Include("Children") _
        p.Parent 什么都不是 _
        选择 p
TreeViewPages.ItemsSource = t

但后来我只得到一棵两层深的树。我需要做什么才能使它正常工作?

4

1 回答 1

11

这不起作用的原因是您只为 TreeView 指定了 DataTemplate。由于它生成的 TreeViewItems 也是 ItemsControls,因此它们也需要设置 ItemTemplate。

实现您希望的最简单方法是将 HierarchicalDataTemplate 放在 TreeView(或其任何父视觉对象)的资源中,并设置 HierarchicalDataTemplate 的 DataType 以便将其应用于您的所有项目。

在容器的声明(很可能是窗口)中,您需要定义到定义 page 的命名空间的映射。

例如

<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>
于 2008-11-07T17:57:46.507 回答