Question

J'ai une TreeView à trois niveaux.

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

Maintenant, lorsque je sélectionne chacun des éléments de l'arborescence, j'aimerais avoir des informations détaillées à ce sujet.

Quel est le meilleur moyen d'y parvenir?

Etant donné que Grid ne contient pas d'éléments (comme un ListBox ), je ne peux pas simplement définir son ItemsSource et créer un . DataTemplate ...

J'ai envisagé d'utiliser un ListBox qui ne contiendra que l'élément sélectionné, mais cela semble très mauvais ...

Merci.

Était-ce utile?

La solution

Vous définissez d’abord les 3 DataTemplate pour vos classes de ligue, de division et d’équipe. Ensuite, vous liez TreeView à la racine de vos objets. Vos classes de ligue et de division devraient avoir une propriété Children qui rend les enfants. Toutes vos classes doivent avoir une propriété Name.

Ensuite, lorsque vous souhaitez afficher un seul objet, utilisez ContentPresenter et liez son contenu au SelectedItem si 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é ni compilé, il n'a été fourni qu'à titre d'exemple.

Autres conseils

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

L'arborescence est liée à un sens à l'arborescence, 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 la sélection actuelle modifiée et les éléments enfants sont liés à la zone de liste les affichant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top