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