J'ai peut-être la souffrance de lundi, le mutisme, mais je ne peux pas trouver un bon moyen de développer tous les nœuds de treeview après que j'ai ajouté dans le code behind (quelque chose comme treeView.ExpandAll()).
Toute aide rapide?
source d'informationauteur Padu Merloti
En xaml, vous pourriez le faire comme suit :
Après avoir joué avec toutes les différentes méthodes pour le développement et la réduction d'une arborescence, de loin la méthode la plus rapide est la suivante. Cette méthode semble fonctionner sur de très grands arbres.
Assurer que votre arbre est virtualisé, si elle n'est pas virtualisé puis dès que l'arbre arrive à tout type de taille, il va devenir terriblement lent et quoi que vous fassiez.
Supposons que vous disposez d'un modèle de vue de la sauvegarde de votre arbre, chaque noeud de ce point de vue le modèle qui correspond à un
HierarchicalDataTemplate
besoin d'unIsExpanded
bien (il n'a pas besoin de mettre en œuvre la propriété a changé). Assumer ces modèles de vue de mettre en œuvre une interface comme ceci:La
TreeViewItem
style doit être définie comme suit pour lier leIsExpanded
propriété dans le modèle de vue à la vue:Nous allons utiliser cette propriété pour définir l'expansion de l'état, mais aussi, parce que l'arbre est virtualisé cette propriété est nécessaire pour maintenir le bon état de la vue que l'individu
TreeViewItem
s sont recyclés. Sans cette liaison nœuds obtiendrez s'est effondré, ils sortent de vue que l'utilisateur navigue sur l'arbre.La seule manière d'obtenir une vitesse acceptable sur les grands arbres est de travailler dans le code behind de la couche vue. Le plan est essentiellement comme suit:
TreeView.ItemsSource
.TreeView.ItemsSource
à l'aide de la liaison nous avons mis en cache à l'étape 1.Parce que nous avons la virtualisation activée, l'exécution d'un bind sur
TreeView.ItemsSource
s'avère être très rapide, même avec un grand modèle de vue. De même, lorsque indépendant de la mise à jour de l'expansion de l'état des nœuds doit être très rapide. Il en résulte étonnamment rapide des mises à jour.Voici un code:
WPF n'a pas de ExpandAll méthode. Vous aurez besoin de faire une boucle par et définissez la propriété sur chaque nœud.
Voir cette question ou ce blog.