2013-03-01 90 views
1

我正在一个WPF项目有一些DataGrid的,并在其中一些我需要应用自定义排序算法。所以我一直在寻找一种方式来做到这一点,在许多网页上我发现下面的代码:自定义排序算法BindingListCollectionView

var myListView = CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource); 

ListCollectionView myListCollectionView = myListView as ListCollectionView; 

myListCollectionView.CustomSort = new CustomSorter(); 

. 
. 
. 

public class CustomSorter : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     // sorting logic ... 
    } 
} 

这似乎是进行自定义排序方法很好,但我的问题是,我不能投我的变量myListViewListCollectionView,因为它原来是一个BindingListCollectionView对象,除了缺乏功能来设置自定义排序算法。

我发现this的解决方案,而是因为他们尝试做以下不为我工作:

ListCollectionView coll = new ListCollectionView(CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource)); 

但没有构造函数作为paremeter一个ICollectionView对象(这是什么功能GetDefaultView回报)。

那么,有没有办法将自定义排序算法应用到BindingListCollectionView对象?

预先感谢您。

编辑:

不幸的是,该解决方案已被放置在一个DataGrid devided类,由于该溶液具有是通用。

希望有人能帮助我。

回答

1

让你实现IComparable的自定义类型的属性MyPropertyToSortOn,再加入一种描述你的列表视图:

ListView.Items.SortDescriptions.Add(new SortDescription("MyPropertyToSortOn", ListSortDirection.Descending)) 


public class MyPropertyClass: IComparable{ 
    public int CompareTo(object obj) { 
    //custom comparison implemented here, returns -1,0 or 1 
    } 
} 

...

public class MyDataClass{ 
    public MyPropertyClass MyPropertyToSortOn {get;set;} 
} 
+0

谢谢您的答复。那么,我是否必须在我的项目由类型组成的类型中实现该属性? – Dante 2013-03-01 21:49:14

+0

@Dante编辑回答你的问题? – 2013-03-01 21:57:36

+0

是的,谢谢,但实际上我很担心,如果有一种方法可以进行排序,但在DataGrid派生类中,因为我无法修改我的“DataClass”,因为它是由XSD工具生成的“DataSet”,所以我不会属于负责这样做的团队。 – Dante 2013-03-04 15:45:17