2009-06-12 13 views
12

Estoy tratando de ordenar una colección derivada de CollectionViewSource, que simplemente tiene SortDescriptions para ordenar. Lamentablemente, necesito poder usar mi propio IComparer personalizado, pero parece que no puedo encontrar una manera de hacerlo. Piensa en una cuadrícula de datos y tengo mi propio algoritmo de ordenación de múltiples columnas. Estoy pensando que una forma de hacerlo es utilizar una colección que implemente CollectionChanged que sea una capa adicional entre CollectionViewSource y mi fuente de datos verdadera, pero realmente preferiría una mejor manera si alguien tiene alguna sugerencia.Ordenando CollectionViewSource usando IComparer personalizado

Respuesta

13

Bea Stollnitz tiene un ejemplo de clasificación personalizado here.

El punto clave de este artículo es para obligar a la CollectionViewSource a un IList aplicación en lugar de una más débil ICollection o IEnumerable interfaz. Con eso, la propiedad View devuelve una instancia de ListCollectionView en lugar de CollectionView. A continuación, puede usar ListCollectionView.CustomSort para asignar un IComparer para hacer su clasificación personalizada. Para facilitar las cosas, también puede usar el método Comparer<T>.Create para usar un delegado Comparison en lugar de una clase completa.

+1

El punto clave de ese artículo es vincular el 'CollectionViewSource' a una implementación' IList' en lugar de una interfaz 'ICollection' o' IEnumerable' más débil. Con eso, la propiedad 'View' devuelve una instancia' ListCollectionView' en lugar de 'CollectionView'. A continuación, puede usar 'ListCollectionView.CustomSort' para asignar un' IComparer' para hacer su clasificación personalizada. Para facilitar las cosas, también puede utilizar el método ['Comparer .Create'] (http://msdn.microsoft.com/en-gb/library/hh737198.aspx) para usar un delegado' Comparación 'en lugar de un toda la clase. – ygoe