2011-04-06 165 views
0

我有一个ListView(GridView)有多个列,到目前为止我可以按字母顺序排列它,但是当我排序A-Z时,空字符串显示在顶部。我想把它们移到最后。我想我已经设法制作了一个IComparer,最终将空字符串,但我不知道如何让我的ListView使用它。这里是我制作的比较器,顺便说一下:如何按照字母顺序对空字符串进行排序WPF GridView?

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare 
    If TypeOf x Is String And TypeOf y Is String Then 
     If x = "" And y = "" Then 
      Return 0 
     ElseIf x = "" And y <> "" Then 
      Return 1 
     ElseIf x <> "" And y = "" Then 
      Return -1 
     End If 
    End If 
    Return x.CompareTo(y) 
End Function 

回答

1

看看这个。你可以使用IComparer类型的自定义分类器,就像你试图做的一样: http://ligao101.wordpress.com/2007/07/31/a-much-faster-sorting-for-listview-in-wpf/

+0

我试着在ListCollectionView上使用CustomSort,就像文章所说的那样,但它没有工作。我的ListView有多个列,每个列绑定到一个类中的一个属性。我使用SortDescriptions按单列进行排序,所以我期望将一个String(属性类型)传递给比较器。相反,它似乎正在传递我的班级类型。为什么???另外文章说使用.ItemsSource,但这对我来说是Nothing/null,因为我设置了DataContext。这会影响它吗? – grant 2011-04-06 23:20:50

+0

嗯,我可以得到这个工作的唯一方法是通过将我的比较器的参数设置为我正在排序的列的属性名称,并使用反射来获取属性的值,但是这会中断多列排序,所以我正在提出一个更具体的新问题。 http://stackoverflow.com/q/5588353/403736 – grant 2011-04-07 22:26:55

相关问题