Récupérer un treeviewItem à partir de son contenu

Signaler
Messages postés
33
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
26 juillet 2010
-
Messages postés
11
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
24 mai 2012
-
Salut tous le monde, j'ai un gros souci avec les treeviewItem et les TreeView si quelqu'un aura une idée je le serai reconnaissante .
en fait sur mon projet j'affiche un Treeview , dans le quel j'affiche une certaine arborescence de répertoires, les répertoires sont récupérés via des appels à des web services, du coup les treeviewitem ne sont pas écrit en dur=> ts ça fonctionnent super bien
mon objectif mnt est de pouvoir récupérer la dernière navigation ça ve dire, si un utilisateur navigue dans ce treeview lors de la prochaine navigation, le treeview sera initialisé au dernier endroit consulté.

j'arrive à récupérer le dernier répertoire consulté aussi que ses sous dossiers
le problème c'est que pour naviguer dans treeview je lui ai associé l'évènement d'expanded, alors lors de la prochaine navigation je veux que le dernier répértoire consulté soit automatiquement étendu( isExpanded = true).
mon problème c'est que j'arrive pas à associer le nom de répertoire que je récupère avec le treeviewItem de mon treeview
voila mon code
private void reloadingTreeView()
        {
             TreeViewItem item= new TreeViewItem();         
 
           //lastDirectory est récupéré de la base de registre
         
           if (lastDirectory != null)
            {
                item.DataContext = lastDirectory.Name;
                 item = treeViewByWS.ItemContainerGenerator.ContainerFromItem(item.DataContext) as TreeViewItem;                
                if (item == null)
                {
                    LOG.Info("item is null");
                }
                else
                {
                 //méthode pour récupérer les sous répertoires
                    LoadSubDirectory(lastDirectory);
                    item.IsExpanded = true;
                }
            }
   
        }
 

j'utilise "ItemContainerGenerator.ContainerFromItem" pour récupérer le treeViewItem à paratir de son contenu mais ça me donne tjr [b]item is null
/b
de l'aide SVP ça fait 3 jours que je suis bloquée sur ça.

merci à ts
NB: tellement je suis bloquée , j'ai posté ce sujet sur un autre forum
si on ne fait pas ce qu'on aime, il faut qu'on aime ce qu'on
fait!

4 réponses

Messages postés
11
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
24 mai 2012
3
Salut,

J'utilise la même méthode que toi pour mais sur une listview et pour que mon item ne sois pas null il faut que le Status soit égal à ContainersGenerated

if (alvlmUnites.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
                {
                    ListViewItem lvi = alvlmUnites.ItemContainerGenerator.ContainerFromItem(ali as ListViewItem);
                    if (lvi != null)
                    {
                        lvi.IsHitTestVisible = false;
                        lvi.IsTabStop = false;
                    }
                }
Messages postés
33
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
26 juillet 2010

tout d'abord merci bcp t'es le seul à me répondre depuis que j'ai posté ce problème et dont j'ai tjrs pas de solution.
j'ai rajouté la condition du statut, mais ça marche tjrs pas, je veux savoir si tu initialise la propriété du statut de ton treeview quelque part avant parce moi ça rentre pas dans la condition
ce veux dire myTreeViewItem.ItemContainerGenerator.Status != System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated

et j'ai affiché la valeur de myTreeViewItem.ItemContainerGenerator.Status ça me donne not started
pourtant le treeViewItem est affiché mais pas étendu

de l'aide parce que je suis complétement perdue
si on ne fait ce qu'on aime, il faut qu'on aime ce qu'on fait!
Messages postés
11
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
24 mai 2012
3
Salut,

Désolé de te répondre si tardivement.

Alors pour ta question, et bien non je ne renseigne jamais le status c'est lui qui ce mets à jour.

Essaye de t'abonner au StatusChanged et regardes si tu passes dans l'évènement.


Autre question :

Est-ce que tu renseigne l'ItemsSource de ton treeview ?
Messages postés
11
Date d'inscription
jeudi 29 novembre 2007
Statut
Membre
Dernière intervention
24 mai 2012
3
Essaye quelque chose comme çà.

TonObjet obj tv.ItemsSource.OfType<TonObjet>().FirstOrDefault(a> obj == lastDirectory.Name);
item = tv.ItemContainerGenerator.ContainerFromItem(obj) as TreeViewItem;