如果对DataGrid列进行排序(而不是排序),如何通知我

Mat*_*asG 5 .net sorting wpf datagrid

我需要在WPF应用程序中使用某种Sorted事件,DataGrid但无法找到获取它的方法.

这是我尝试过的:

DataGrid提供了一个事件Sorting,但我不能使用它,因为它排序完成之前被触发.该EventArgs给我这整理,但不是它的排序方式,如果我得到的排序方向设置为旧值的列.当然我可以猜到它将会是什么,因为我知道它会从无翻转到提升并最终降序但这将无法解决,因为如果控件的行为发生变化,它将失败.

第二次尝试:

DataGrid有一个默认视图,提供对a的访问SortDescriptionCollection.此集合包含所有排序属性,但我认为没有任何可能让我通知有关更改.

我不得不说我正在寻找一个尽可能干净的解决方案,因为它将用于一个大型项目,我不能使用在环境发生变化时可能失败的解决方案.

有没有人从经验(或文档?)知道如何解决这个问题?

编辑:为了更清楚地说明我想要实现的目标:DataGrid当用户对列进行排序时,我需要知道哪个列按哪个方向排序.排序本身之后没有必要提供这些信息,它必须是正确的;)

Ste*_*ier 14

我自己通过覆盖DataGrid实现了DataGrid事件的Sorted,如下所示:

public class ValueEventArgs<T> : EventArgs
{
    public ValueEventArgs(T value)
    {
        Value = value;
    }

    public T Value { get; set; }

}

public class DataGridExt : DataGrid
{
    public event EventHandler<ValueEventArgs<DataGridColumn>> Sorted;

    protected override void OnSorting(DataGridSortingEventArgs eventArgs)
    {
        base.OnSorting(eventArgs);

        if (Sorted == null) return;
        var column = eventArgs.Column;
        Sorted(this, new ValueEventArgs<DataGridColumn>(column));
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使用它,那么您需要做的就是:

    private void Initialize()
    {
            myGrid.Sorted += OnSorted;
    }
    private void OnSorted(object sender, ValueEventArgs<DataGridColumn> valueEventArgs)
    {
    // Persist Sort...
    }
Run Code Online (Sandbox Code Playgroud)