2010-12-15 354 views
2

J'essaye de lier un IList à un TreeView WPF dans un affichage hiérarchique. Voici mon objet:WPF - XAML Treeview à la liaison 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; 
    } 
} 

Je ne sais pas combien d'enfants un objet particulier aura, et les enfants peuvent avoir des enfants aussi.

Je FÜSSING avec mon HierarchialDataTemplate, mais pas réussir:

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

Toutes les suggestions?

+0

Vous ne devriez avoir qu'un seul HierarchicalDataTemplate car tous vos nœuds sont des TeamsTreeViewItem, sinon comment WPF va-t-il savoir lequel utiliser? Vous devez également lier ItemsSource à la collection Children: ItemsSource = "{Binding Path = Children}" – markmnl

Répondre

1

Vous devez appliquer le ItemsSource aux enfants comme ceci:

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

I a appliqué cette DataTemplate en fonction du type de données, de cette façon si les enfants sont du même type (TeamsTreeViewItem) est devrait appliquer automatiquement à tout objet qu'il trouve de ce type, même s'il s'agit d'un enfant, d'un petit-enfant ou d'un arrière grand-père ... petit-fils. Assurez-vous d'inclure l'espace de noms (indiqué ici comme "local") dans lequel TeamsTreeViewItem est défini.