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] TreeView & SelectedItem


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Par défaut [WPF] TreeView & SelectedItem
    Bonjour,

    J'utilise un TreeView dans mon appli et j'aurais aimer savoir comment modifier le selectedItem dans un treeview ? (le paramétre selectedItem ne fonctionne que en Get, Idem pour SelectedValue)
    et comment désactiver le SelectedItem courant ?

    merci d'avance pour votre aide

  2. #2
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    Je pense que ces liens répondront à ta question :

    http://ewilkerson.wordpress.com/2007/04/20/how-to-programmatically-change-the-selecteditem-in-a-wpf-treeview/

    http://www.codeproject.com/WPF/TreeV...lectionWPF.asp


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public static void SetSelectedItem(ref TreeView control, object item)
    {
        try
        {
            DependencyObject dObject =
                control.ItemContainerGenerator.ContainerFromItem(item);
     
             ((TreeViewItem)dObject).IsSelected = true;
        }
        catch { }
    }

  3. #3
    Membre très actif
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Par défaut
    Merci pour l'info ... je venez justement de tomber sur cette article

  4. #4
    Membre très actif
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Par défaut
    Le probléme dans mon cas avec cette solution c'est que mon treeview ne contient pas des TreeViewItem mais un ObservableCollection<MonObjet>

    MonObjet étant une classe de mon cru

  5. #5
    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
    Citation Envoyé par UNi[FR] Voir le message
    Le probléme dans mon cas avec cette solution c'est que mon treeview ne contient pas des TreeViewItem mais un ObservableCollection<MonObjet>

    MonObjet étant une classe de mon cru
    Fait un DataTemplate pour ton Treeview dans lequel tu met des TreeviewItem. En bindant ton treeview à ta collection, tu devrais tout de même avoir des treeviewitem

  6. #6
    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
    Citation Envoyé par Thomas Lebrun Voir le message
    Fait un DataTemplate pour ton Treeview dans lequel tu met des TreeviewItem. En bindant ton treeview à ta collection, tu devrais tout de même avoir des treeviewitem
    Je confirme que c'est possible en faisant comme cela

  7. #7
    Membre très actif
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Par défaut
    C'est bon j'ai trouvé une solution

    Edit :.

    Le probléme avec cette méthode c'est qu'il ne gére que le premier niveau

    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
     
            public void SetSelectedItem(ref TreeView control, object item)
            {
                try
                {
                    DependencyObject dObject = null;
                    for (int i = 0; i < control.Items.Count; i++)
                    {
                        // mon objet de type FileNode 
                        FileNode _fn = (item as System.Windows.Controls.TreeViewItem).Tag as FileNode;
                        if ((control.Items[i] as FileNode) == _fn)
                        {
                            dObject = control.ItemContainerGenerator.ContainerFromIndex(i);
                            break;
                        }
     
                    }
     
                    if (dObject != null)
                        ((System.Windows.Controls.TreeViewItem)dObject).IsSelected = true;
                }
                catch { }
            }
     
            private void TreeViewItem_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
                SetSelectedItem(ref TVDriveSQL, sender);
     
            }

  8. #8
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    As-tu trouvé une solution pour parcourir tous les treeviewItems enfant à n'importe quel niveau ?

  9. #9
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    Je crois que j'ai compris le problème. Par contre je n'ai toujours pas de solution...
    En fait, les treeviewItems enfants d'un treeviewItem ne sont crées que lorsque ce dernier est déployé. Le problème est que si l'on essai de passer la propriété "IsExpanded" du treeviewItem parent à true avant de parcourir ses enfants, ces derniers ne sont effectivement ajoutés que lorsque l'UI est mise à jour, c'est à dire après le retour de la méthode en cours. Voilà pourquoi control.ItemContainerGenerator.ContainerFromIndex(i) nous retourne toujours une valeur nulle.

    Quelqu'un aurait une idée pour résoudre/contourner ce problème ?

  10. #10
    Membre très actif
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Par défaut
    Oui j'ai trouvé la solution, je te poste ca dés que possible ;0)

    Edit : voila une fonction récursive qui va sélectionné le TreeViewItem selon la valeur de son Tag (disponible aussi sur mon blog)
    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
            // On explore le TreeViewItem pour voir si on sélectionne un élément (fonction récursive)
            private bool readTreeViewItem(TreeViewItem inTVI, object inId)
            {
                if (inTVI.Tag.ToString() == inId.ToString())
                {
                    inTVI.IsSelected = true;
                    expandTreeViewItem(inTVI, inId.ToString());
                    return true;
                }
                else
                {
                    if (inTVI.Items.Count > 0)
                    {
                        for (int i = 0; i < inTVI.Items.Count; i++)
                        {
                            bool _b = readTreeViewItem((inTVI.Items[i] as TreeViewItem), inId);
                            if (_b)
                                return true;
                        }
                    }
                }
     
                return false;
            }

Discussions similaires

  1. [WPF] TreeView avec CheckBox en cascades?
    Par bakonu dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 18/07/2008, 10h59
  2. WPF Treeview et Customization
    Par EzecKiel dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 27/05/2008, 16h38
  3. Réponses: 11
    Dernier message: 10/12/2007, 13h47
  4. [WPF] TreeView et contextMenu
    Par binoo dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 09/11/2007, 15h29
  5. Réponses: 2
    Dernier message: 20/08/2007, 06h35

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