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 :

Récupérer le TreeViewItem parent


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut Récupérer le TreeViewItem parent
    Salut,

    J'ai un TreeView dont les éléments ont été définis via une CollectionViewSource contenant des objets persos.
    J'aimerai accéder au TreeViewItem parent de l'objet sélectionné.

    Comment puis-je faire ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Sur ton treeview, accède à l'ItemContainerGenerator et utilise la méthode ContainerFromInder: http://msdn.microsoft.com/en-us/libr...rfromitem.aspx

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Si je ne dis pas de bêtise, cette méthode permet de récupérer le TreeViewItem correspondant à un objet.
    Moi j'aimerai pouvoir récupérer le TreeViewItem parent, autrement dit celui de niveau N-1 dans l'arborescence...

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    +Noeud1
       Noeud1-1
       Noeud1-2
    +Noeud2
    Quand je sélectionne le noeud Noeud1-1, j'aimerai pouvoir récupérer le noeud Noeud1.

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Ben, tu utilises ma technique + sur le TreeviewItem récupéré, tu utilises la propriété Parent.

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Je me permets de revenir sur ce sujet que j'avais totalement zappé... :S

    Alors, tout d'abord, je me suis rendu compte que la méthode ContainerFromItem d'un TreeView ne fonctionne QUE pour les noeuds de niveau 1.
    Si on appelle cette méthode avec en paramètre un objet représenté par un noeud de niveau 2 (comme "Noeud1-1" dans mon exemple), cela renvoie null.
    Pour pallier cela, j'ai récupérer les méthodes d'extension décrites ici.
    Du coup, si j'appelle ceci :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    TreeViewItem myTvi = myTreeView.ContainerFromItem(myNode11Object) as TreeViewItem;
    où myNode11Object est l'objet représenté par le noeud "Noeud1-1", j'obtiens bien le TreeViewItem correspondant.

    Par contre, si la propriété Parent de ce TreeViewItem me renvoie toujours null.
    Es-tu sûr que la propriété Parent renvoie le TreeViewItem parent ?

    PS : J'ai remarqué que la propriété ParentTreeViewItem (qui n'est malheureusement pas publique) me renvoie bien le TreeViewItem parent que j'attend...

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ah ben en fait, j'ai trouvé la solution sur ton blog

    Chez moi, ta méthode renvoie bien le TreeViewItem parent, par contre la propriété Parent renvoie null, contrairement à ce que tu dis dans le post.

    A voir donc...

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Content que cela ait pu t'aider tout de même

  8. #8
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Chez moi ca ne fonctionne pas, VisualTreeHelper.GetParent(item) lorsque item est un TreeViewItem, me renvoie null.

  9. #9
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Pour info, j'avais dû rajouter la condition "parent != null" dans le while.
    Ce qui donnait ça :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            public static T FindParentOfType<T>(DependencyObject item)
                where T : DependencyObject
            {
                DependencyObject parent = VisualTreeHelper.GetParent(item);
     
                do
                {
                    parent = VisualTreeHelper.GetParent(parent) as DependencyObject;
                }
                while (parent != null && parent.GetType() != typeof(T));
     
                return parent as T;
            }

    Sinon question : tu appelles la méthode sur quel noeud ?
    Si c'est un noeud de niveau 1, c'est normal qu'il te renvoie null...

  10. #10
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Oui ca doit être pour ca tu as raison, comme moi ce qui m'intéresse c'est de récupérer le TreeView de n'importe quel TreeViewItem, j'ai donc fait ainsi. Je ne sais pas si il y a plus propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            public static TreeView GetTreeView(TreeViewItem treeviewItem)
            {
                DependencyObject l_dependencyObject = treeviewItem;
                while(l_dependencyObject != null && !(l_dependencyObject is TreeView))
                {
                    DependencyObject l_tmp = VisualTreeHelper.GetParent(l_dependencyObject);
                    if (l_tmp == null) l_tmp = ((TreeViewItem)l_dependencyObject).Parent;
                    l_dependencyObject = l_tmp;                
                }
                return (TreeView)l_dependencyObject;
            }

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

Discussions similaires

  1. Récupérer le répertoire parent
    Par freestyler dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/12/2007, 11h50
  2. Récupérer le domaine parent
    Par Pill_S dans le forum Langage
    Réponses: 4
    Dernier message: 14/10/2007, 22h17
  3. [DOM] DOM : Récupérer un élément parent
    Par atar64 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/07/2007, 09h34
  4. Récupérer la classe parente
    Par jagboys dans le forum MFC
    Réponses: 3
    Dernier message: 15/07/2006, 00h06
  5. Comment récupérer le répertoire parent d'un répertoire?
    Par Jayceblaster dans le forum Delphi
    Réponses: 14
    Dernier message: 23/05/2006, 18h38

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