2011-09-12 16 views
2

私はFirstName、LastNameプロパティ(その他のプロパティも含む)を含むカスタムエンティティを持っています。私はDataGridTemplateColumn(StringFormatでMultiBindingを使用)としてFullName(LastName、FirstName)を表示するDataGridにこのエンティティをバインドします。ユーザーはデータグリッド列を並べ替えることができ、FullName列をクリックすると、レコードはLastNameでソートされ、次にFirstName(ソート方向はクリック数に基づいてトグルされます)でソートされなければなりません。上記のシナリオで希望のソート(複数列)を達成することが可能かどうかを知りたいですか?マルチバンドフィールドと同じ順序でDataGridTemplateColumn(MultiBindingを使用)を並べ替える方法

SortMemberPath属性を使用してみましたが、そこには1つの列しか指定できません。

実体にFullNameという名前のカスタムReadOnlyプロパティを追加するとわかりますが、MultiBindingを実装して同じことを実現できるかどうかを知りたいだけです。

おかげで、 パンカジ

+0

私は同じことを知っていただきたいと思います。 2つ以上のフィールドでテンプレート列をソートするのは、非常に一般的なシナリオでなければなりません。私が持っている唯一のアイデアは、コレクション内の他のアイテムと比較して各エンティティの事前分類されたランクを保持する別のプロパティを作成することです。これは、ユーザーがその列でソートするかどうかを知る前にソートを実行する必要があるため、コストがかかります。 – 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(); 
     } 
    } 

は、私はあなたが実行する必要があるハードな方法を見つけましたICollectionView(この例ではBindingListCollectionView)でソートされ、DataViewではソートされません。そうしないと、DataViewで実行する並べ替えは、ICollectionViewの並べ替えセットによって上書きされます。

私は、このリンクが非常に役に立った:http://msdn.microsoft.com/en-us/library/ms752347.aspx#what_are_collection_views

+0

私はこの解決策を実行した唯一の欠点は、一度に複数の列による並べ替えを処理する方法がわからないことです(シフト+クリックソート) – xr280xr

関連する問題