2011-09-12 3 views
2

FirstName, LastName 속성 (다른 속성도 포함)이있는 사용자 지정 엔터티가 있습니다. 이 엔티티를 DataGrid에 바인딩합니다. DataGrid는 FullName (성, 이름)을 DataGridTemplateColumn (StringFormat과 함께 MultiBinding 사용)으로 표시합니다. 사용자는 데이터 그리드 열을 정렬 할 수 있으며 FullName 열을 클릭하면 레코드를 성으로 정렬 한 다음 이름을 정렬해야합니다 (정렬 방향은 클릭 수에 따라 토글됩니다). 위의 시나리오에서 원하는 정렬 (다중 열)을 얻는 것이 가능한지 알고 싶습니다.Multibound 필드와 동일한 순서로 DataGridTemplateColumn (MultiBinding 사용)을 정렬하는 방법

SortMemberPath 특성을 사용했지만 하나의 열만 지정할 수있었습니다.

내 엔티티에 FullName이라는 사용자 정의 ReadOnly 속성을 추가하면 모든 것이 작동한다는 것을 알았지 만 구현 된 MultiBinding을 구현할 수 있는지 이해하고 싶습니다.

덕분에, 판 카지

+0

:

나는 매우 도움이 링크를 발견했다. 두 개 이상의 필드에서 템플릿 열을 정렬하려면 매우 일반적인 시나리오 여야합니다. 내가 가지고있는 유일한 아이디어는 컬렉션의 다른 것들에 상대적인 각 엔티티의 사전 정렬 된 순위를 유지하는 또 다른 속성을 만드는 것입니다. 이는 사용자가 해당 열을 기준으로 정렬할지 여부를 알기도 전에 정렬을 수행해야하기 때문에 비용이 많이 든다. – xr280xr

답변

0

내가 도와 다른 스레드를 발견했다. Here과 같이 기본 정렬을 재정의하려면 DataGrid.Sorting 이벤트를 사용할 수 있습니다. 그 대답은 DataGrid를 재정의하지만 그럴 필요가 없다고 말합니다. 그것은 또한 당신이 그렇게 여기에 데이터 소스로 IList의 사용 대신, DataTable을/DataView를 가정 한 예입니다 한 가정 (IBindingList) 출처 :

private void dgPeople_Sorting(object sender, DataGridSortingEventArgs e) 
    { 
     //Assumes you've named your column colFullName in XAML 
     if (e.Column == colFullName) 
     { 
      ListSortDirection direction = (e.Column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending; 

      //set the sort order on the column 
      e.Column.SortDirection = direction; 

      //Prevent the default sorting 
      e.Handled = true; 

      //Get the static default view that the grid is bound to to redefine its sorting 
      BindingListCollectionView cv = (BindingListCollectionView)CollectionViewSource.GetDefaultView(dgPeople.ItemsSource); 
      cv.SortDescriptions.Clear(); 
      cv.SortDescriptions.Add(new SortDescription("FirstName", direction)); 
      cv.SortDescriptions.Add(new SortDescription("LastName", direction)); 
      cv.Refresh(); 
     } 
    } 

나는 당신이 수행해야하는 어려운 방법을 발견 DataView가 아니라 ICollectionView (이 예제의 BindingListCollectionView)에 대한 정렬 그렇게하지 않으면 DataView에서 수행하는 정렬이 ICollectionView의 정렬 집합으로 덮어 쓰여집니다. 내가 같은 일을 알고 싶습니다 http://msdn.microsoft.com/en-us/library/ms752347.aspx#what_are_collection_views

+0

이 솔루션으로 실행 한 단점은 한 번에 여러 열 정렬 (Shift + 클릭 정렬)을 처리하는 방법을 잘 모르겠다는 것입니다. – xr280xr

관련 문제