2010-03-23 5 views
3

Considérons la structure de données suivantes:TreeView dans la liaison question WPF

List<Person> People; 
class Person { 
    List<Car> Cars; 
    List<Hobby> Hobbies; 
} 

Je veux lier un TreeView à cette structure. Et il devrait ressembler à ceci:

People 
> Frank 
    > Cars 
    > BMW 
    > Ford 
    > Hobbies 
    > Tennis 
    > Golf 
> Jane 
    > Cars 
    > Hobbies 

Comment cela peut-il être réalisé en XAML? Voici ce que j'ai jusqu'à présent:

<TreeView> 
    <TreeView.Resources> 
    <DataTemplate x:Key="PersonTemplate"> 
     <TextBlock Header="{Binding Name}"> 
     <TextBlock.ContextMenu> 
      <ContextMenu> 
      <MenuItem Header="Remove" /> 
      </ContextMenu> 
     </TextBlock.ContextMenu> 
     </TextBlock> 
    </DataTemplate> 
    </TreeView.Resources> 

    <TreeViewItem Header="{Binding Name}"IsExpanded="True" > 
    <TreeViewItem Header="People" 
      ItemsSource="{Binding People}" 
      ItemTemplate="{StaticResource PersonTemplate}"> 
    </TreeViewItem> 
    </TreeViewItem> 
</TreeView> 

C'est une question de suivi à binding-a-treeview-with-contextmenu-in-xaml

Répondre

5

Ceci est une excellente façon de commencer à utiliser MVVM pour TreeView reliure:

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

+0

Tu m'as battu :-) C'est une abstraction si propre de la présentation et de la couche de données (Model). J'ai effectivement utilisé l'exemple de Josh dans le code de production et cela fonctionne magnifiquement. – bic

+0

Je suis d'accord, en travaillant à travers cet échantillon spécifique vraiment fait tout cliqué pour moi. – gn22

+0

Ok, ça a l'air intéressant. Je vais faire d'autres lectures demain. Recommandez-vous d'utiliser un ViewModel comme: class PersonViewModel {object [] Items = {nouveau CarsViewModel(), new HobbiesViewModel()}? Donc créer un ViewModel pour chaque TreeViewItem que je veux afficher? –