2 sütuna göre sıralamak istediğim bir ListView (GridView) var, bu yüzden 2 + öğeleri Sütun 1'de aynı değere sahipse, 2 sütununa göre sıralar. kolay. Fakat boş dizeler A-Z'yi sıralarken en üstte görünür. Onları dibe doğru taşımak istiyorum. Bununla ilgilenen bir karşılaştırıcı (IComparer) yaptım, ama nasıl kullanacağımı bilmiyorum.WPF - Birden çok sütuna göre sıralanırken özel bir karşılaştırıcı kullanma
İşte denedim kod:
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
sorun benim karşılaştırıcısı göre sıralanmakta olan benim sınıfın bir tür yerine mülkiyet/sütunun değerini verilir olduğunu. Öyleyse eğer sınıf Foo'yduysa ve Foo.Bar tarafından sıralıyorum, tüm Foo sınıfını aldım, sadece Bar'ın değerini değil.
Karşılaştırıcım, hangi özelliklerin karşılaştırılacağını nasıl bilecek? Belki burada yanlış bir şey yapıyorum, çünkü bu hiç mantıklı değil. X ve y için bir dize (özellik türü) almayı bekledim ...
Bunu nasıl yapacağını bilen var mı?
SizinIComparer
uygulama tüm nesne verilecektir
Bu, bir sütuna göre sıralanırken çalışır, ancak PropertyPath tıklatılan sütuna başvurduğundan (kodumda ayrıca sortHeader), ikinci sütunu (ikinci SortDescription) karşılaştırdığında bile bu sütuna bakar.). Karşılaştırıcı, ilk sütuna (tıklanan) veya ikincisine (sütun 1'de aynı değere sahip 2+ olduğunda) bakması gerektiğini nasıl anlar? – grant
Yukarıdaki soruyu cevaplamak için yukarıdaki bazı değişiklikleri yaptım :) – Jose