2010-12-15 163 views
2

我想將IList綁定到分層顯示中的WPF TreeView。這是我的對象:WPF-XAML樹視圖到Generic.List綁定

public class TeamsTreeViewItem 
{ 
    public string DisplayValue { get; set; } 
    public string KeyValue { get; set; } 

    readonly List<TeamsTreeViewItem> children = new List<TeamsTreeViewItem>(); 

    public IList<TeamsTreeViewItem> Children 
    { 
    get 
    { 
    return children; 
    } 
    } 

    public override string ToString() 
    { 
    return DisplayValue; 
    } 
} 

我不知道一個特定對象會有多少個孩子,孩子也可能有孩子。

我大驚小怪周圍與我HierarchialDataTemplate,但沒有取得成功:

<TreeView Canvas.Left="263" Canvas.Top="12" Height="200" Name="TeamTreeView" Width="120"> 
     <TreeView.Resources> 
      <HierarchicalDataTemplate DataType="{x:Type local:TeamsTreeViewItem}" ItemsSource="{Binding DisplayValue}" > 
       <TextBlock Text="{Binding DisplayValue}"/> 
      </HierarchicalDataTemplate> 
      <HierarchicalDataTemplate DataType="{x:Type local:TeamsTreeViewItem}" ItemsSource="{Binding Children}" > 
       <TextBlock Text="{Binding DisplayValue}"/> 
      </HierarchicalDataTemplate> 
     </TreeView.Resources> 
    </TreeView> 

有什麼建議?

+0

您應該只有一個HierarchicalDataTemplate,因爲所有節點都是TeamsTreeViewItem,否則WPF將如何知道使用哪一個?您還需要將ItemsSource綁定到Children集合:ItemsSource =「{Binding Path = Children}」 – markmnl 2010-12-16 03:25:32

回答

1

您需要的的ItemsSource適用於兒童,像這樣:

<HierarchicalDataTemplate DataType="{x:Type local:TeamsTreeViewItem}" ItemsSource="{Binding Path=Children}"> 
    <TextBlock Text="{Binding DisplayValue}"/> 
</HierarchicalDataTemplate> 

我採用基於數據類型此DataTemplate中,這樣,如果孩子是同一類型(TeamsTreeViewItem)是應該自動應用它到任何它發現的那種類型的物品,即使它是一個小孩,孫子或偉大偉大的......孫子。只需確保包含名稱空間(在此表示爲「本地」)即TeamsTreeViewItem被定義。