2009-06-12 7 views
12

J'essaie de trier une collection dérivée de CollectionViewSource, qui contient simplement SortDescriptions pour le tri. Malheureusement, je dois pouvoir utiliser mon IComparer personnalisé, mais je n'arrive pas à trouver un moyen de le faire. Pensez à une grille de données et j'ai mon propre algorithme de tri multi-colonnes. Je pense qu'une façon de le faire est d'utiliser une collection implémentant CollectionChanged qui est une couche supplémentaire entre CollectionViewSource et ma vraie source de données, mais je préférerais vraiment un meilleur moyen si quelqu'un a des suggestions.Tri de CollectionViewSource à l'aide de IComparer personnalisé

Répondre

13

Bea Stollnitz a un exemple de tri personnalisé here.

Le point essentiel de cet article est de lier la CollectionViewSource à une mise en oeuvre IList plutôt que d'une interface ICollection ou IEnumerable plus faible. Avec cela, la propriété View renvoie une instance ListCollectionView au lieu de CollectionView. Vous pouvez ensuite utiliser ListCollectionView.CustomSort pour affecter un IComparer à votre tri personnalisé. Pour faciliter les choses, vous pouvez également utiliser la méthode Comparer<T>.Create pour utiliser un délégué Comparison au lieu d'une classe entière.

+1

Le point clé de cet article est de lier 'CollectionViewSource' à une implémentation' IList' plutôt qu'à une interface ICollection' ou 'IEnumerable' plus faible. Avec cela, la propriété 'View' renvoie une instance' ListCollectionView' au lieu de 'CollectionView'. Vous pouvez ensuite utiliser 'ListCollectionView.CustomSort' pour affecter un' IComparer' à votre tri personnalisé. Pour faciliter les choses, vous pouvez également utiliser la méthode ['Comparer .Create'] (http://msdn.microsoft.com/en-gb/library/hh737198.aspx) pour utiliser un délégué' Comparison' au lieu d'un la classe entière. – ygoe

Questions connexes