Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pre-sorting a DataGrid in WPF

I have a DataGrid in WPF app with several columns, including a Name column. If the users switches to a particular view, I want the data to be pre-sorted by Name (and I'd like a sort arrow to appear in the Name header just as if the user had clicked that header). However, I can't find the expected properties to make this happen. I was looking for something like SortColumn, SortColumnIndex, SortDirection, etc.

Is it possible to specify the default sort column and direction in markup (XAML) or is that not supported by the WPF Toolkit DataGrid?

like image 355
devuxer Avatar asked Oct 26 '09 20:10

devuxer


1 Answers

Assuming you're talking about the WPF Toolkit DataGrid control, you need only set the CanUserSortColumns property to true and then set the SortMemberPath property of each DataGridColumn in the DataGrid.

As far as sorting the collection initially, you must use a CollectionViewSource and set the sort on that and then assign that as the ItemsSource of your DataGrid. If you're doing this in XAML then it would be as easy as:

<Window.Resources>     <CollectionViewSource x:Key="MyItemsViewSource" Source="{Binding MyItems}">         <CollectionViewSource.SortDescriptions>            <scm:SortDescription PropertyName="MyPropertyName"/>         </CollectionViewSource.SortDescriptions>     </CollectionViewSource> </Window.Resources>  <DataGrid ItemsSource="{StaticResource MyItemsViewSource}">  </DataGrid> 

NOTE: the "scm" namespace prefix maps to System.ComponentModel where the SortDescription class lives.

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 

EDIT: I think enough people got help from this post, that this upvoted comment should be included in this answer:

I had to use this to get it to work:

<DataGrid ItemsSource="{Binding Source={StaticResource MyItemsViewSource}}"> 
like image 120
Drew Marsh Avatar answered Sep 18 '22 11:09

Drew Marsh