Mam ListView (GridView), który chcę posortować według 2 kolumn, więc jeśli 2+ elementy mają taką samą wartość w kolumnie 1, sortuje według kolumny 2. Pretty łatwo. Jednak przy sortowaniu A-Z pojawiają się puste struny u góry. Chciałbym przenieść je na sam dół. Zrobiłem porównywarkę (IComparer), która zajmuje się tym, ale nie jestem pewien, jak z niego korzystać.WPF - Używanie niestandardowego porównywalnika podczas sortowania według wielu kolumn
Oto kod próbowałem:
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
Problem jest mój comparer podano typ mojej klasie zamiast wartości nieruchomości/kolumnie są posortowane wg. Więc jeśli klasa jest Foo i sortuję według Foo.Bar, otrzymuję całą klasę Foo, nie tylko wartość Bar (która tak naprawdę powinna być zatroskana, ponieważ to jest to, przez co ją sortuje).
W jaki sposób mój porównawca będzie wiedział, którą nieruchomość porównać? Może robię coś złego tutaj, ponieważ to nie ma sensu. Spodziewałem się uzyskać String (typ właściwości) dla x i y ...
Czy ktoś wie, jak to zrobić?
Działa to podczas sortowania za pomocą jednej kolumny, ale ponieważ ścieżka właściwości PropertyPath odnosi się do klikniętej kolumny (która jest również sortHeader w moim kodzie), wygląda na tę kolumnę, nawet jeśli powinna porównywać drugą kolumnę (drugi parametr SortDescription). W jaki sposób porównawca wie, czy powinien wyglądać do pierwszej kolumny (klikniętej) czy drugiej (kiedy są 2+, które mają taką samą wartość w kolumnie 1)? – grant
Wprowadzono kilka zmian powyżej, aby spróbować odpowiedzieć na dokładne pytanie :) – Jose