Question

Je crée un TreeView lors de l'exécution. Il comporte plusieurs noeuds (TreeViewItem), chacun ayant un nom. Dans un premier temps, il est effondré. A COMBOBOX distincts affiche les noms de tous TreeViewItem. Je dois souligner un TreeViewItem en fonction du nom sélectionné. J'utilise une fonction récursive et obtient le conteneur TreeViewItem comme ceci:

if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                continue;

TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();

mais il est

  

parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted

pour tous les éléments effondrés. Comment puis-je générer des conteneurs pour les manuellement (sans les étendre)?

Était-ce utile?

La solution

Chaque fois que vous vous trouvez à pied de l'arbre visuel vous devriez penser sérieusement à la construction d'un modèle de vue.

le modèle de vue peut augmenter la fonctionnalité arborescences sans se soucier des types de problèmes que vous rencontrez.

Le modèle de vue pour votre application aurait quelques propriétés supplémentaires

IsSelected

IsExpanded

IsHighlighted

ainsi que votre

Data

vous lierait (en utilisant un ItemContainerStyle) le IsSelected, IsHighlighted et IsExpanded au TreeViewItem, alors que vous aviez une collection de ces modèles vue que vous pourriez faire votre recherche sur le modèle de vue et juste définir la propriété IsHighlighted. Le modèle de vue répondrait alors et à cause de la liaison au style qu'il mettrait en évidence l'TreeViewItem si vous voulez. Il pourrait aussi faire des choses funky comme développer tous les nœuds ci-dessus. L'arborescence répondrait à cela.

Le modèle de vue lorsqu'il est combiné avec une vue arborescente donne beaucoup plus de flexibilité et arrête ces arbres visuels exercices rampants (qui sont un hack, et la sensation sale)

ici est un bon article sur le ViewModel et TreeView .. .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top