IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

TreeView & template dynamique


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut TreeView & template dynamique
    Bonjour à tous,

    j'utilise un arbre (treeview) pour afficher des listes d'éléments triées par "groupes".

    par exemple mes données sont rangées dans des dictionnaires avec comme clés les noms de groupe.

    avec deux niveaux les données sources sont stockées dans un objet du type Dictionary<String, Dictionary<String, List<MyData>>>.

    et le template de l'arbre est le suivant:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <TreeView Name="treeview" ItemsSource="{Binding TreeViewData}" Grid.Row="1" Grid.Column="0" Margin="4" SelectedItemChanged="treeview_SelectedItemChanged">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=Value}" >
                <TextBlock FontWeight="Bold" Text="{Binding Path=Key}" />
                <HierarchicalDataTemplate.ItemTemplate>
                    <HierarchicalDataTemplate ItemsSource="{Binding Path=Value}" >
                        <TextBlock FontWeight="Bold" Text="{Binding Path=Key}" />
                        <HierarchicalDataTemplate.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Path=Name}" />
                            </DataTemplate>
                        </HierarchicalDataTemplate.ItemTemplate>
                        <HierarchicalDataTemplate.ItemContainerStyle>
                            <Style TargetType="{x:Type TreeViewItem}">
                                <EventSetter Event="MouseDoubleClick" Handler="OnTreeItemDoubleClick" />
                            </Style>
                        </HierarchicalDataTemplate.ItemContainerStyle>
                    </HierarchicalDataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
    je voudrais pouvoir changer le nombre de niveaux de groupe sans devoir modifier le template.
    est-ce qu'il est possible de rendre le template "dynamique" ?

    en somme je voudrais pouvoir utiliser même template avec les types de données:
    1 niveau: Dictionary<String, List<MyData>>et
    2 niveaux: Dictionary<String, Dictionary<String, List<MyData>>>
    Merci de votre aide.

  2. #2
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Salut beekeep

    Bon je n'ai jamais été super à l'aise avec des HiéarchicalDatatemplate mais pour ton problème, je ferais éventuellement :

    -une classe spécifique c1 (pour ton niveau 1) dérivant de Dictionary<String, List<MyData>>

    -une classe spécifique c2 (pour ton niveau 2) dérivant de Dictionary<String, Dictionary<String, List<MyData>>>

    Après tu définis tes templates dans tes ressources en spécifiant bien le type

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <!-- pour les c1 par exemple-->
    <HierarchicalDataTemplate DataType="{x:Type m:c1}"
                                   ItemsSource="{Binding Path=Value}">

    Et normalement en fonction du type d'objet que tu bindes, il te récupère le bon template

    Enfin ça ne reste qu'une piste selon moi (à voir avec d'autres plus expérimentés là dedans)

    Bon courage

  3. #3
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Par défaut
    Salut et merci pour ta réponse.


    Il faut laisser l'arbre prendre le bon template pour chaque noeud.

    Pour cela il ne faut pas renseigner ItemTemplate et définir les templates pour chacun des Types d'objet dans les ressources du treeview:

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <TreeView ItemsSource="{Binding MyData}">
      <TreeView.Ressources>
        <DataTemplate DataType="{x:Type MyNameSpace:MyClass}">
          <TextBlock Text="{Binding Name}" />
        </DataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type MyNameSpace:MyOtherClass}" ItemsSource="{Binding Children}">
          <TextBlock Text="{Binding Name}" />
        </HierarchicalDataTemplate>
      </TreeView.Ressources>
    </TreeView>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Template dynamique dans un datagrid lié a un XML
    Par trouffiondesiles dans le forum Silverlight
    Réponses: 2
    Dernier message: 29/09/2010, 14h47
  2. [Smarty] Inclure un template dynamiquement
    Par torest dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/01/2010, 20h55
  3. Réponses: 22
    Dernier message: 03/03/2009, 16h47
  4. Réponses: 1
    Dernier message: 04/03/2008, 22h22
  5. Trouver le Type d'une classe template dynamiquement ?
    Par Serge Iovleff dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2005, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo