2008-11-07 37 views
8

Tôi có một lớp học với các thuộc tính của Phụ huynh và Trẻ em.WPF TreeView Binding

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

Tôi muốn hiển thị hệ thống cấp bậc này trong một TreeView WPF.

Dưới đây là XAML của tôi ...

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

Và mã VB của tôi ...

 
Dim db As New PageEntities 
Dim t = From p In db.Page.Include("Children") _ 
     Where p.Parent Is Nothing _ 
     Select p 
TreeViewPages.ItemsSource = t 

Nhưng sau đó tôi chỉ nhận được một cây hai cấp độ sâu. Tôi cần làm gì để làm việc này?

+0

Xem câu hỏi liên quan: http://stackoverflow.com/questions/269523/how-do-i-use-a-wpf-treeview-hierarchicaldatatemplate-with-linq-to-entities#273535 –

Trả lời

11

Lý do tại sao điều này không hoạt động là bạn chỉ xác định DataTemplate cho TreeView. Kể từ khi TreeViewItems mà nó tạo ra cũng là ItemsControls, họ sẽ cần phải có ItemTemplate thiết lập là tốt. Cách đơn giản nhất để đạt được những gì bạn đang hy vọng là đặt HierarchicalDataTemplate vào tài nguyên của TreeView (hoặc bất kỳ hình ảnh cha mẹ nào của nó), và đặt DataType của HierarchicalDataTemplate để nó được áp dụng cho tất cả các mục của bạn .

Trong khai báo vùng chứa của bạn (cửa sổ có khả năng nhất), bạn cần xác định ánh xạ tới không gian tên nơi trang được xác định.

ví dụ:

<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

DataType = "{x: Type local: Page}" cho lỗi: (1) "Type 'Page' không tìm thấy." và (2) "'cục bộ' là một không gian tên không khai báo." –

+0

Xin lỗi về sự nhầm lẫn, tôi đã cập nhật câu trả lời để làm rõ rằng bạn cần phải thêm một khai báo xmlns để chỉ định nơi để tìm lớp Trang. –

+0

Cảm ơn bạn. Tôi đã thêm xmlns: local = "clr-namespace: PageManager" và nó tạo khuôn mẫu cho các nút trên cây ngay bây giờ. Nhưng tôi vẫn chỉ nhận được một cây hai cấp độ sâu. –