我使用此论坛帖子Sort a wpf datagrid programmatically中的解决方案以编程方式对DataGrid列进行排序。
public static void SortDataGridByMultipleColumns(DataGrid dataGrid, Dictionary<int,ListSortDirection> sortInfo)
{
//here I force DataGrid to exit edit or add new mode
RemoveNewAndEdit(dataGrid);
// Clear current sort descriptions
dataGrid.Items.SortDescriptions.Clear();
//Apply sort
foreach(var i in sortInfo)
{
var column = dataGrid.Columns[i.Key];
dataGrid.Items.SortDescriptions.Add(new SortDescription(column.SortMemberPath, i.Value));
}
// Apply sort
foreach (var col in dataGrid.Columns)
{
col.SortDirection = null;
}
foreach (var i in sortInfo)
{
var column = dataGrid.Columns[i.Key];
column.SortDirection = i.Value;
}
// Refresh items to display sort
dataGrid.Items.Refresh();
}
当我向DataGrid添加新行并按Enter键时,我的问题就开始了 - 然后新行自动排序。当行数很高时,我可以从我的视线中丢失这一行。所以我需要排序旧行,列标题样式已更改,但新行未排序(我希望它们位于列表末尾,直到发生一些刷新)。
我相信这是可以实现的,因为当我使用
对XAML中的列进行排序时SortMemberPath="columnPropertyPath" SortDirection="Ascending"
所有工作都像我需要的那样,但我也需要从后面的代码中进行排序,因为我希望实现一天的用户排序设置。