2010-12-06 34 views
2

J'essaie de lier une structure de données complexe à un TreeView WPF en utilisant HierarchicalDataTemplate (s). Les collections de données sont stockées dans mon ViewModel en tant que IList de MyObject - MyObject a plusieurs propriétés dont plusieurs sont des listes à leur propre compte.WPF TreeView, Entity Framework et HierarchicalDataTemplate avec des listes enfants imbriquées

La sortie que je suis en train de réaliser est quelque chose le long des lignes de:

+ MyObject 1 <br> 
    + List1 <br> 
    - List 1 Object 1 <br> 
    - List 1 Object 2 <br> 
    + List2 <br> 
    - List 2 Object 1 <br> 
    - List 2 Object 2 <br> 
+ MyObject 2 <br> 
    + List1 <br> 
    - List 1 Object 1 <br> 
    - List 1 Object 2 <br> 
    + List2 <br> 
    - List 2 Object 1 <br> 
    - List 2 Object 2 <br> 

Cependant, je ne peux pas sembler obtenir le composite collection que j'ai vu mentionné quelques lieux de travail -

Répondre

3

Je viens de faire quelque chose de similaire à cela. Malheureusement, vous ne pouvez pas le faire directement, car TreeViewItem n'accepte qu'une seule collection pour son ItemsSource.

Ce que j'ai fait a été de créer un modèle qui expose le contenu de la manière dont TreeView l'exige.

public class MyObjectWrapper 
{ 
    public MyObject Target {get;set;} 
    public IEnumerable MyLists 
    { 
    get 
    { 
     yield return Target.List1; 
     yield return Target.List2; 
    } 
    } 
} 

où MyObject est défini comme:

public class MyObject 
{ 
    public List1CollectionType List1 {get;private set;} 
    public List2CollectionType List2 {get;private set;} 
} 

Vos liaisons sont alors

  • TreeViewItem: MyObjectWrapper
    • ItemsSource: MyLists
    • TreeViewItem: List1CollectionType
      • ItemsSource: {Reliure} (se fixe directement au datacontext)
    • TreeViewItem: List2CollectionType
      • ItemsSource: {Reliure}

Vous » ll a besoin d'un DataTemplate pour MyObjectWrapper, List1CollectionType et List2C ollectionType.

+0

Pourriez-vous clarifier ce à quoi 'Target' fait référence? Merci de votre visite. – Rachael

+0

@ cible UB3571 est l'objet hypothétique contenant les listes qui doivent être affichées dans l'arborescence – Will