2013-03-01 2 views
1

에 좀 DataGrid 년대가있는 WPF 프로젝트를 진행하고, 그들 중 일부에 나는 사용자 정의 정렬 알고리즘을 적용해야합니다. 그래서 방법을 검색 한 것은 이러한 목표를 달성하기 위해 많은 웹 페이지에 다음 코드 발견 :사용자 정의 정렬 알고리즘 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 ... 
    } 
} 

사용자 지정 정렬을 수행 할 수있는 아주 좋은 방법이 될 것 같다,하지만 내 문제가 있다는 것입니다 I 이 외에 사용자 정의 정렬 알고리즘을 설정하는 기능의 부족한 BindingListCollectionView 객체로 밝혀졌다 때문에 ListCollectionView 내 변수를 myListView 캐스팅 수 없습니다.

나는 this 해결책을 발견하지만 그들은 다음을 수행하려고하기 때문에 나를 위해 작동하지 않습니다

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

을하지만 기능 GetDefaultView 반환되는 (A paremeter로 ICollectionView에 객체를 취하는 생성자가 없다).

그래서하는 BindingListCollectionView 객체에 정렬 알고리즘 사용자 지정을 적용 할 수있는 방법은 무엇입니까?

미리 감사드립니다.

편집 :이 솔루션은 일반적으로 가지고 있기 때문에

불행하게도,이 솔루션은하는 DataGrid 나누어 클래스에 배치 될 수있다.

누군가 나를 도울 수 있기를 바랍니다.

답변

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

+0

@ 단테가 편집 답변을합니까? –

+0

예, 감사합니다,하지만 실제로 나는 종류를 만들 수있는 방법이 있는지 wordering했지만 그것은 XSD 도구에 의해 생성 된'DataSet'을하기 때문에 데이터 그리드 파생 클래스에서 내 "DataClass"를 수정할 수 없기 때문에, 나는 그나마 그 일을 담당하는 팀에 속해 있습니다. – Dante