2012-04-02 114 views
0

我並不都熟悉標記。我試圖用TreeView來測試DataTemplate。基本上我試圖創建一個名爲parents的列表,向其中添加2個元素,然後創建兩個子項並將它們添加到列表中的父項之一,最後將父列表綁定到TreeView。但我不知道如何引用p1, p2裏面的列表。現在我想我不應該用xaml浪費我的時間,並且應該在代碼背後做到這一點。有任何想法嗎?如何使用子集合製作父元素集合

<Window.Resources> 
    <local:Parent Name="Parent 1" x:Key="p1"/> 
    <local:Parent Name="Parent 2" x:Key="p2"/> 
    <x:ArrayExtension Type="local:Parent" x:Key="parents"> 
     <!-- Can't refer p1 and p2 from here :(-->   
    </x:ArrayExtension> 

    <local:Child ChildName="Child 1" Parent="{StaticResource ResourceKey=p1}"/> 
    <local:Child ChildName="Child 1" Parent="{StaticResource ResourceKey=p1}"/> 
</Window.Resources> 

<Grid> 
    <StackPanel VerticalAlignment="Center"> 
     <TreeView ItemsSource="{Binding Source={StaticResource ResourceKey=p1}}" /> 
    </StackPanel> 
</Grid> 

這兩個類:

public class Parent 
{ 
    public string Name { get; set; } 
    public IList<Child> Children { get; set; } 

    public Parent() 
    { 
     Children = new List<Child>(); 
    } 
} 

public class Child 
{ 
    public string ChildName { get; set; } 
    private Parent _parent; 
    public Parent Parent 
    { 
     get 
     { 
      return _parent; 
     } 
     set 
     { 
      _parent = value; 
      if (value != null) 
      { 
       value.Children.Add(this); 
      } 
     } 
    } 
} 

回答

1
  1. 沒有必要把TreeViewStackPanelStackPanel堆棧元素,但在你的情況下,它只有一個元素 - TreeView
  2. 您需要爲TreeView定義HierarchicalDataTemplate。這裏有一個例子:

<HierarchicalDataTemplate x:Key="TreeViewTemplate" ItemsSource="{Binding Children}" > 
    <!-- Some markup here --> 
</ HierarchicalDataTemplate> 

這裏ItemsSource屬性告訴什麼財產綁定數據containes當前節點的孩子的集合。它遞歸地應用於該孩子的每個孩子和每個孩子,等等。


最後,關於在xaml中定義數據。有幾種方法,但在這種情況下,我寧願從Parent中派生出ParentTest,並創建默認的c'tor來填充Children集合。