[WPF] Améliorer les performances lors du tri d’une CollectionView
Lorsque l’on utilise une CollectionView, il est possible d’utiliser la propriété SortDescription pour trier la vue:
cvs.SortDescriptions.Clear();
cvs.SortDescriptions.Add(new SortDescription("Lastname", ListSortDirection.Ascending));
Le seul problème de cette technique, c’est que la vue est rafraichie 2 fois:
- Lorsque l’on appelle la méthode Clear
- Lorsque l’on appelle la méthode Add
En effet, chacune de ces méthodes déclenche l’évènement CollectionChanged qui provoque un rafraichissement de la vue.
Dans le cas de petite collections, pas de problèmes cependant, dans le cas de grande collection, trier 2 fois la vue peut-être assez vite désastreux en termes de performances. Pour remedier à cela, il est possible d’utiliser la méthode DeferRefresh de la classe CollectionView:
using (cvs.DeferRefresh())
{
cvs.SortDescriptions.Clear();
cvs.SortDescriptions.Add(new SortDescription("Lastname", ListSortDirection.Ascending));
}
De cette façon, la vue ne sera rafraichie qu’une seule fois. Toutes les méthodes, propriétés, etc. à l’intérieur du bloc using ne provoqueront pas de rafraichissement mais indiqueront qu’il est nécessaire d’en faire un. A la fin du bloc, la méthode (privée) EndDefer est appelée et une rafraichissement de la vue est effectué !
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :