我有一个ListView(GridView),我想按2列进行排序,因此如果2+项在列1中具有相同的值,则按列2排序。简单。但排序A-Z时,空字符串显示在顶部。我想将它们移到底部。我做了一个比较器(IComparer)来处理这个问题,但我不确定如何使用它。WPF - 在按多列进行排序时使用自定义比较器
这是我试过的代码:
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
问题是我的比较器被赋予一个类型我的课,而不是财产/列的值由进行排序。所以如果这个类是Foo并且我按Foo.Bar进行排序,那么我得到了整个Foo类,而不仅仅是Bar的值(它真的应该被关注,因为这就是它的排序依据)。
我的比较器如何知道要比较哪个属性?也许我在这里做错了什么,因为这没有任何意义。我希望得到一个字符串(属性类型)的x和y ...
有谁知道如何做到这一点?
这对一列进行排序时有效,但由于PropertyPath引用了被单击的列(也是我的代码中的sortHeader),因此即使它应该比较第二列(第二个SortDescription )。比较器如何知道它应该看第一列(点击的那一列)还是第二列(当列2中有2+的值相同时)? – grant 2011-04-07 23:28:10
上面做了一些更改,尝试回答你确切的问题:) – Jose 2011-04-08 13:17:16