2008-11-07 117 views
8

我有一个父类和儿童属性的类。WPF TreeView绑定

ADO.NET Entity Framework Hierarchical Page Class 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 As New PageEntities 
Dim t = From p In db.Page.Include("Children") _ 
     Where p.Parent Is Nothing _ 
     Select p 
TreeViewPages.ItemsSource = t 

但后来我只得到一棵树深的两个级别。我需要做些什么来完成这项工作?

+0

请参阅相关的问题:http://stackoverflow.com/questions/269523/how-do-i-use-a-wpf-treeview-hierarchicaldatatemplate-with-linq-to-entities#273535 – 2008-11-07 20:29:14

回答

11

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

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

在你的容器的声明(最有可能的窗口)中,你需要定义一个映射到定义页面的命名空间。

例如

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

数据类型= “{x:Type local:Page}”给出错误:(1)“找不到类型”页面“。和(2)“'本地'是一个未声明的命名空间。” – 2008-11-07 18:41:14