2010-12-15 9 views
2

Ich versuche, eine IList zu einem WPF-TreeView in einer hierarchischen Anzeige zu binden. Hier ist meine Aufgabe:WPF - XAML Treeview zu Generic.List Bindung

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; 
    } 
} 

Ich weiß nicht, wie viele Kinder eine besondere Aufgabe haben wird, und die Kinder könnten Kinder haben.

Ich Getue mit meinem HierarchialDataTemplate herum, aber nicht erfolgreich zu sein:

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

Irgendwelche Vorschläge?

+0

Sie sollten nur ein HierarchicalDataTemplate haben, da alle Ihre Knoten ein TeamStreeViewItem sind. Wie weiß WPF dann, welches verwendet wird? Außerdem müssen Sie ItemsSource an die Children-Auflistung binden: ItemsSource = "{Binding Path = Children}" – markmnl

Antwort

1

Sie müssen die Itemssource an die Kinder anzuwenden wie so:

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

ich dieses Datatemplate angewendet basierend auf dem Datentyp, auf diese Weise, wenn die Kinder sind vom gleichen Typ (TeamsTreeViewItem) ist, sollte es automatisch anwenden zu irgendeinem Einzelteil, das es von diesem Typ findet, selbst wenn es ein Kind, ein Enkelkind oder ein großer großer großer ... Enkel ist. Stellen Sie sicher, dass Sie den Namespace (hier als "local" bezeichnet) enthalten, in dem das TeamStreeViewItem definiert ist.