2011-04-06 10 views
0

J'ai un ListView (GridView) avec plusieurs colonnes et jusqu'ici je peux le trier par colonne par ordre alphabétique, mais quand je suis en train de trier A-Z, les chaînes vides apparaissent en haut. Je veux les déplacer jusqu'à la fin. Je pense que j'ai réussi à faire un IComparer qui va mettre des chaînes vides à la fin, mais je ne sais pas comment faire en sorte que mon ListView l'utilise. Voici le comparateur que j'ai fait, au fait:Comment trier WPF GridView par ordre alphabétique avec des chaînes vides à la fin?

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 

Répondre

1

Check this out. Vous pouvez câbler dans un trieur personnalisé de type IComparer, tout comme vous essayez de le faire: http://ligao101.wordpress.com/2007/07/31/a-much-faster-sorting-for-listview-in-wpf/

+0

J'ai essayé d'utiliser le CustomSort sur un ListCollectionView comme l'indique l'article, mais cela n'a pas fonctionné. Mon ListView a plusieurs colonnes, chacune étant liée à une propriété dans une classe. J'utilise SortDescriptions pour trier par une seule colonne, donc je m'attendrais à ce qu'une chaîne (le type de propriété) soit transmise au comparateur. Il semble passer un type de ma classe, à la place. Pourquoi??? Aussi l'article dit d'utiliser .ItemsSource, mais c'est Nothing/null pour moi, parce que je suis en train de définir le DataContext. Cela pourrait-il l'affecter? – grant

+0

Eh bien, la seule façon d'obtenir ce résultat était de définir un paramètre de mon comparateur sur le nom de la colonne que je triais et d'utiliser des réflexions pour obtenir la valeur de la propriété, mais cela casse le tri de plusieurs colonnes, Je fais une nouvelle question un peu plus précise. http://stackoverflow.com/q/5588353/403736 – grant

Questions connexes