Est-ce que quelqu'un connaît une implémentation de listeView qui prend en charge la virtualisation de l'UI lors du regroupement est activé? Par défaut, la VirtualizingStackpanel est désactivée lorsque le regroupement est configuré. P>
Il semble que Microsoft ne puisse pas mettre en œuvre cela dans le V4.0 de la structure .NET, donc je cherche des solutions alternatives. P>
4 Réponses :
Une option est de jeter un coup d'œil à une série de Bea Stollniz sur l'amélioration des performances d'une arborescence: Partie 1 , Partie 2 et Partie 3 . Alors que ce qu'elle fait est plus orientée vers les arbres, qui n'ont aucune virtualisation, car elles collègent par défaut, les leçons acquises pourraient certainement être appliquées à une liste personnalisée qui possède des groupes virtualisateurs. En fait, dans la partie 3, elle utilise une liste de liste comme base pour créer l'arborescence virtualisante, ce qui constitue un bon départ pour le regroupement virtualisé. Affichage évidemment des éléments tels que dans une TreeView contient des différentes diffrences, telles que la sélection des nœuds de groupe, à partir d'une liste de regroupement, mais qui pourrait être corrigée en attrapant la sélection enregistrée. P>
Merci! J'ai consulté le code d'échantillon dans la partie 3. La principale difficulté que j'ai eu est de savoir comment puis-je ajouter l'élément de regroupement à l'aide des groupdescriptions
J'ai localisé un échantillon à Grouper et virtualisation de code MSDN échantillon < / a> qui convertit la liste groupéeView en une liste à plat qui prend en charge la virtualisation. Cependant, je ne peux pas savoir comment imiter les actions en expansion des en-têtes. P>
Avez-vous eu de chance pour déterminer comment basculer la visibilité des articles groupés? Demandez-leur de vous comporter comme s'ils étaient des expanseurs avec les articles groupés en tant que contenu?
Désolé je n'ai pas fait de progrès sur ce
Le lien fourni au code exemple ne fonctionne plus car la bibliothèque de code a été déplacée ici est le lien vers le déplacé Groupement et virtualisation Échantillon de code MSDN
WPF / .NET 4.5 prend maintenant en charge cette https://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingpanel.isvirtualizingwhengrouping (v = vs.110) .aspx p>
Si vous ciblez toujours 4.0, vous pouvez la définir avec une réflexion afin qu'au moins certains utilisateurs puissent obtenir l'avantage. P>
J'espère que ce n'est pas trop de sujet, mais j'avais récemment un problème similaire. Comme indiqué ci-dessus, il ne s'agit que d'un problème .NET 4.0. Je conviendrais même que dans la plupart des cas avec une boîte déroulante, vous ne devez normalement pas nécessiter de virtualisation car il ne faut pas avoir que de nombreux éléments et s'il est nécessaire de regrouper, une solution de détail maîtrise devrait être mise en œuvre. Mais il pourrait y avoir des zones grises.
Le lien fourni par Luke sur le regroupement et la virtualisation sur MSDN m'a beaucoup aidé. Dans mon cas, c'était la seule approche que j'ai pu venir ou trouver n'importe où dans une direction dont j'ai besoin. Il ne prend pas en charge toutes les fonctionnalités de ListViewCollection. Je devais remplacer quelques méthodes, sinon la sélection d'articles ne fonctionnerait pas correctement. Il y a évidemment plus de travail à faire. P>
Voici une solution mise à jour de FlatgrouplistCollectionView de ici : p> xaml reste le reste telle qu'elle est dans le code de l'échantillon. Afficher le modèle reste aussi bien que signifie utiliser FlatgrouplistCollectionview et configurer des groupdescriptions. P> Je préfère cette solution car elle sépare la logique de regroupement de ma liste de données dans la liste des données. Une autre solution consisterait à mettre en œuvre la prise en charge du regroupement sur la liste originale des éléments dans le modèle d'affichage, ce qui signifie d'en quelque sorte identifier les en-têtes. Pour une utilisation d'une fois, cela devrait aller bien, mais la collection peut être recréée dans un but différent ou sans regroupement qui n'est pas si agréable. P> P>