Tengo un ListView (GridView) que quiero ordenar por 2 columnas, así que si 2+ elementos tienen el mismo valor en la Columna 1, ordena por la Columna 2. Bonita fácil. Pero las cadenas vacías aparecen en la parte superior al ordenar A-Z. Me gustaría moverlos al fondo. Hice un comparador (IComparer) que se encarga de esto, pero no estoy seguro de cómo usarlo.WPF - Usar un comparador personalizado al ordenar por varias columnas
Aquí está el código que he intentado:
Dim view As ListCollectionView = CollectionViewSource.GetDefaultView(myCollection)
Using view.DeferRefresh
view.SortDescriptions.Clear()
view.SortDescriptions.Add(New SortDescription(sortHeader.Header, direction))
view.SortDescriptions.Add(New SortDescription(otherColumn, direction))
view.CustomSort = New MyComparer()
End Using
El problema es mi comparador se da un tipo de mi clase en lugar del valor de la propiedad/columna que se está clasificado por. Entonces, si la clase es Foo y estoy clasificando por Foo.Bar, obtengo toda la clase Foo, no solo el valor de Bar (que es realmente todo lo que debería preocuparle, ya que eso es lo que está ordenando).
¿Cómo va a saber mi comparador qué propiedad comparar? Tal vez estoy haciendo algo mal aquí, porque esto no tiene ningún sentido. Esperaba obtener un String (el tipo de propiedad) para xy y ...
¿Alguien sabe cómo hacer esto?
Esto funciona cuando se ordena por una columna, pero dado que PropertyPath se refiere a la columna que se hizo clic (que también es sortHeader en mi código), busca esa columna incluso cuando debería comparar la segunda columna (la segunda SortDescription) ¿Cómo sabe el comparador si debe mirar hacia la primera columna (la que se hace clic) o la segunda (cuando hay 2+ que tienen el mismo valor en la columna 1)? – grant
Hizo algunos cambios arriba para intentar responder la pregunta exacta :) – Jose