Articles in this section
Category / Section

How to sort your binded collection of ViewModel in WinRT DataGrid?

1 min read

By default, DataGrid will not sort the underlying collection when displayed in the grid. When you sort a column, internally datagrid will maintain the underlying collection and does a sort that reflects only in view. So, if you want to sort the underlying collection of view model, you can apply sorting by using SortColumnChanged event.

C#

this.datagrid.SortColumnsChanged += datagrid_SortColumnsChanged;
private void datagrid_SortColumnsChanged(object sender, GridSortColumnsChangedEventArgs e)
{
    var viewModel = this.DataContext as ViewModel;
 
    // view model collection taken
    IEnumerable<BusinessObjects> OrderedSource = viewModel.GDCSource;
 
    foreach (var sortColumn in datagrid.View.SortDescriptions)
    {
        // get property name of current sort column
        var columnName = sortColumn.PropertyName;
 
        if (sortColumn.Direction == ListSortDirection.Ascending)
        // make a sorting by ascending order
            OrderedSource = OrderedSource.OrderBy(b => OrderSource(b, columnName));
        else
        // make a sorting by descending order
            OrderedSource = OrderedSource.OrderByDescending(b => OrderSource(b, columnName));
    }
}
 
private object OrderSource(BusinessObjects b, string name)
{
    var propInfo = b.GetType().GetRuntimeProperty(name);
    if (propInfo != null)
        // get the current sort column value
        return propInfo.GetValue(b);
    return null;
}    

 

Note: In Silverlight, the following code sample can be used to get the current sort column value.

C#

private object OrderSource(OrderInfo b, string name)
{
    var propInfo = b.GetType().GetProperty(name);
    if (propInfo != null)
        // get the current sort column value
        return propInfo.GetValue(b, null);
    return null;
}

 

Here, the underlying collection of SfDataGrid is taken by GetValue. If sortColumn.Direction is ListSortDirection.Ascending the sorting is applied for that collection in ascending direction, that is based on SortDescriptions column, otherwise it will be sorted in descending direction. OrderSource method is used to get the column value.

Sample Links:

WPF

WRT

SilverLight

UWP

 

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied