How can I apply a custom sort rule to a WPF DataGrid?
this is how i do it : I do derive from the grid to keep all of this inside the class, so i attach to event handlers internally
attach to the sorting event
dataGrid.Sorting += new DataGridSortingEventHandler(SortHandler);
implement the method (i do this in a derived class)
void SortHandler(object sender, DataGridSortingEventArgs e){ DataGridColumn column = e.Column; IComparer comparer = null; //i do some custom checking based on column to get the right comparer //i have different comparers for different columns. I also handle the sort direction //in my comparer // prevent the built-in sort from sorting e.Handled = true; ListSortDirection direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending; //set the sort order on the column column.SortDirection = direction; //use a ListCollectionView to do the sort. ListCollectionView lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(this.ItemsSource); //this is my custom sorter it just derives from IComparer and has a few properties //you could just apply the comparer but i needed to do a few extra bits and pieces comparer = new ResultSort(direction); //apply the sort lcv.CustomSort = comparer;}
I have an MVVM solution for this problem which makes use of attached behaviours. If you prefer to use code-behind, @Aran's solution will do the trick too.