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 :

[WPF] Binding dans un arbre hiérarchique


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    520
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 520
    Points : 543
    Points
    543
    Par défaut [WPF] Binding dans un arbre hiérarchique
    Bonjour,

    J'ai (pour schématiser)les classes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class noeud
       String Nom;
       List<noeud> Enfants;
     
    class arbre
       noeud racine;
    Je les instancie et les remplis pour obtenir quelque chose comme ça:
    (monArbre)racine
    |_noeud1
    | |_noeud1a
    | |_noeud1b
    |
    |_noeud2
    |_noeud2a
    |
    |_noeud2b

    J'effectue ensuite le binding sur un treeview comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                Binding lien = new Binding("Enfants");
                lien.Source = monArbre.Racine;
                lien.Mode = BindingMode.OneWay;
                treeView1.DisplayMemberPath = "Nom";
                treeView1.SetBinding(ItemsControl.ItemsSourceProperty, lien);
    J'ai bien tous les éléments du 1er niveau qui apparaissent, mais c'est tout.
    J'ai trouvé pas mal d'exemple de "HierarchicalDateTemplate", mais ils sont tous codés directement dans le XAML. Je n'ai rien trouvé pour une liaison dynamique et toutes mes tentatives d'adaptation de ces exemples ont échoué.
    Est-ce que quelqu'un aurait déjà travaillé là-dessus?
    7 fois à terre, 8 fois debout

  2. #2
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,

    dans un TreeViewItem, la propriété Items ne contient que les enfants directs. Effectiement, le mieux est d'utiliser un HierarchicalDataTemplate :

    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
     
    <Window.Resources>
     
            <HierarchicalDataTemplate x:Key="noeudTemplate"
                                      ItemsSource="{Binding Path=Enfants}">
     
                <TextBlock Text="{Binding Path=Nom}"
                           Margin="1"/>
     
            </HierarchicalDataTemplate>
     
            <Style TargetType="{x:Type TreeViewItem}"
                   x:Key="itemStyle">
     
                <Setter Property="ItemTemplate" Value="{StaticResource noeudTemplate}"/>
     
            </Style>
     
        </Window.Resources>
     
        <Grid>
     
            <TreeView ItemsSource="{Binding Path=Racine.Enfants}"
                      ItemTemplate="{StaticResource noeudTemplate}"
                      ItemContainerStyle="{StaticResource itemStyle}">
     
     
            </TreeView>
     
        </Grid>
    Dans l'exemple, je pars du principe que le DataContext de la fenêtre est un objet de type Arbre.

  3. #3
    Membre confirmé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    520
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 520
    Points : 543
    Points
    543
    Par défaut
    Merci, le résultat obtenu est pile poil celui que je voulais.
    Par contre, avant de mettre le tag "Résolu", j'aimerais savoir s'il y a un moyen de faire la même chose par le code, sans modifier le fichier .xaml ?
    7 fois à terre, 8 fois debout

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

Discussions similaires

  1. [WPF]Binding d'une propriété contenu dans une propriété
    Par Babas007 dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 23/11/2010, 19h51
  2. Réponses: 0
    Dernier message: 30/06/2009, 21h41
  3. [WPF] Peut on mettre une phrase + un binding dans un TextBox?
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 12/05/2009, 21h02
  4. [WPF/Blend] Affichage des contenus multiples dans l'arbre du designer
    Par Rolsct dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 19/01/2009, 21h29
  5. [WPF] Probléme de binding dans un UserControl :(
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 17/07/2008, 15h51

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