Search code examples
wpfuser-controlswpfdatagrid

Initial DataGrid Sorting


I have a user control that contains a WPF toolkit DataGrid. This control is used in many different places in my app. The grid has no knowledge as to the type of data that will show. Is there a way to initially sort the grid by the first column in ascending order no matter what data the grid is populated with? I don't think I can use a CollectionViewSource because I don't know the PropertyName of the property bound to the first column.


Solution

  • You could hook to an event:

    dataGrid.AutoGeneratedColumns += dataGrid_AutoGeneratedColumns;
    

    and sort the first column:

    void dataGrid_AutoGeneratedColumns(object sender, EventArgs e)
    {
        var firstCol = dataGrid.Columns.First();
        firstCol.SortDirection = ListSortDirection.Ascending;
        dataGrid.Items.SortDescriptions.Add(new SortDescription(firstCol.SortMemberPath, ListSortDirection.Ascending));
    }
    

    I would suggest you to create a derived separate DataGrid control, placing this logic there and using the new control to avoid repeating the code every time.

    public class CustomDataGrid : DataGrid
    {
        public DynamicDataGrid()
        { ... }
    
        ...
    }