2008-11-07 176 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