2009-09-11 9 views
0

J'ai un TreeView qui a trois niveaux.WPF Multiple master/détails, même grille

Disons que c'est une ligue, division et équipe TreeView.

Maintenant, quand je sélectionne chacun des éléments dans l'arborescence, je voudrais voir des informations détaillées à ce sujet.

Quel est le meilleur moyen d'y parvenir?

Depuis Grid ne prend pas en éléments (comme un ListBox), je ne peux pas en posèrent les ItemsSource et faire une DataTemplate ...

Je pensais à l'aide d'un ListBox qui contiendra uniquement l'élément sélectionné, mais ce semble être très mauvais ...

Merci.

Répondre

1

Vous définissez d'abord les 3 DataTemplate s pour vos classes de ligue, de division et d'équipe. Après, vous liez le TreeView à la racine de vos objets. Vos classes League et Division doivent avoir une propriété Children qui renvoie les enfants. Toutes vos classes devraient avoir une propriété Name.

Ensuite, lorsque vous souhaitez afficher un seul objet, utilisez le ContentPresenter et liez son contenu au SelectedItem si le TreeView.

Par exemple:

<StackPanel> 
    <StackPanel.Resources> 

     <DataTemplate DataType="{x:Type your_namespace:League}"> 
      <StackPanel Orientation="Vertical"> 
       <TextBlock Text={Binding Name}/> 
       <.../> 
      <StackPanel> 
     </DataTemplate> 

     <DataTemplate DataType="{x:Type your_namespace:Division}"> 
      <StackPanel Orientation="Vertical"> 
       <TextBlock Text={Binding Name}/> 
       <.../> 
      <StackPanel> 
     </DataTemplate> 

     <DataTemplate DataType="{x:Type your_namespace:Team}"> 
      <StackPanel Orientation="Vertical"> 
       <TextBlock Text={Binding Name}/> 
       <.../> 
      <StackPanel> 
     </DataTemplate> 

    </StackPanel.Resources> 

    <TreeView x:Name="_tree" ItemsSource="{Binding RootOfYourItems}"> 
     <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Children}"> 
      <TextBlock Text={Binding Name}/> 
     </HierarchicalDataTemplate> 
    </TreeView> 

    <ContentPresenter Content="{Binding Path=SelectedItem, ElementName=_tree}" /> 

</StackPanel> 

Ce code n'a pas été testé ou compilé, il vient de fournir à titre d'exemple.

+0

Merci, je n'étais pas au courant de la puissance de ContentPresenter, ça a marché :) – Tsury

0

Je créerais un modèle avec des propriétés pour la structure de l'arbre, la sélection actuelle et les détails de la sélection courante.

La structure de l'arborescence est liée à la vue arborescente, l'élément SelectedItem de l'arborescence est OneWayToSource lié à la propriété de sélection actuelle (en raison des limitations de la propriété). Cette propriété modifie la liste des éléments enfants une fois que la sélection en cours a été modifiée et les éléments enfants sont liés à la zone de liste qui les affiche.

Questions connexes