Ho un ListView (GridView) che voglio ordinare per 2 colonne, quindi se 2+ elementi hanno lo stesso valore nella Colonna 1, ordina per Colonna 2. Abbastanza facile. Ma le stringhe vuote appaiono in alto quando si ordina A-Z. Mi piacerebbe spostarli verso il basso. Ho creato un comparatore (IComparer) che si occupa di questo, ma non sono sicuro di come utilizzarlo.WPF - Utilizzo di un comparatore personalizzato quando si ordina per più colonne
Ecco il codice che ho provato:
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
Il problema è il mio operatore di confronto viene dato un tipo di mia classe al posto del valore della proprietà/colonna di essere ordinati per. Quindi se la classe è Foo e sto ordinando da Foo.Bar, ottengo l'intera classe Foo, non solo il valore di Bar (che in realtà è tutto ciò di cui dovrebbe preoccuparsi, dato che è ciò che ordina da).
Come sarà il mio comparatore a sapere quale proprietà confrontare? Forse sto facendo qualcosa di sbagliato qui, perché questo non ha alcun senso. Mi aspettavo di ottenere una stringa (il tipo di proprietà) per xe y ...
Qualcuno sa come fare questo?
Questo funziona quando si ordina da una colonna, ma poiché PropertyPath fa riferimento alla colonna su cui è stato fatto clic (che è anche sortHeader nel mio codice), guarda a quella colonna anche quando dovrebbe comparare la seconda colonna (la seconda SortDescription). Come fa il comparatore a sapere se dovrebbe guardare la prima colonna (quella cliccata) o la seconda (quando c'è 2+ che hanno lo stesso valore nella colonna 1)? – grant
Apportate alcune modifiche sopra per provare a rispondere alla domanda esatta :) – Jose