7
votes

WPF ListView Regroupement de la virtualisation

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é.

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.


0 commentaires

4 Réponses :


0
votes

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.


1 commentaires

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




4
votes

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

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.


0 commentaires

0
votes

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.

Voici une solution mise à jour de FlatgrouplistCollectionView de ici : xxx

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.

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.


0 commentaires