2013-03-01 96 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