DataGrid在Sorting事件后再次排序

时间:2013-07-29 07:01:04

标签: c# wpf xaml sorting datagrid

我尝试使用带有以下代码的DataGridSortingEvent而不使用shift键对多个列进行排序:

private void dataGridPayables_Sorting(object sender, DataGridSortingEventArgs e)
{
        if (e.Column.SortDirection == null)
            e.Column.SortDirection = ListSortDirection.Descending;

        ListSortDirection sort_direction = (ListSortDirection)e.Column.SortDirection;

        dataGridPayables.Items.SortDescriptions.Clear();

        dataGridPayables.Items.SortDescriptions.Add
            (new SortDescription(e.Column.SortMemberPath, sort_direction));
        dataGridPayables.Items.SortDescriptions.Add
            (new SortDescription("total_amount", sort_direction));
        dataGridPayables.Items.SortDescriptions.Add
            (new SortDescription("payment_actual", sort_direction));
        dataGridPayables.Items.SortDescriptions.Add
            (new SortDescription("status", sort_direction));
        e.Column.SortDirection = sort_direction;

        dataGridPayables.Items.Refresh();

        MessageBox.Show("SORT " + e.Column.SortMemberPath + " " + sort_direction.ToString());
}

我发现数据网格是按照上面的代码排序的,但是当它离开方法时,C#会再次对其进行排序,只选择所选的列并丢失多重排序功能。

请帮忙

1 个答案:

答案 0 :(得分:0)

您需要通过标记e.Handled="True"来停止事件路由。

Sorting是一个冒泡事件,它在源元素上引发并导航到可视树,直到它到达根元素或者直到通过将事件标记为已处理来停止冒泡。

这些链接有助于了解WPF中的RoutedEvents

  1. http://wpftutorial.net/RoutedEvents.html

  2. http://msdn.microsoft.com/en-us/library/ms742806.aspx