.net - 如果 DataGrid 列已排序(而不是排序),我如何收到通知

标签 .net wpf sorting datagrid

我需要一个 Sorted事件 DataGrid 在 WPF 应用程序中,但找不到获取它的方法。

这是我尝试过的:
DataGrid提供事件 Sorting ,但我不能使用它,因为它在排序完成之前就被触发了。 EventArgs给我排序但不是排序方式的列,如果我得到排序方向,它将设置为旧值。当然,我可以猜到它会是什么,因为我知道它从无翻转到上升,最后到下降,但这不是解决方案,因为如果控件的行为发生变化,它就会失败。

第二次尝试:
DataGrid有一个默认 View ,可以访问 SortDescriptionCollection .该集合包含所有排序属性,但我看不到任何让我通知更改的可能性。

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

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

编辑:为了更清楚我想要实现的目标:我需要知道哪个 DataGrid当用户对列进行排序时,列是按哪个方向排序的。这些信息不一定要在排序之后出现,它必须是正确的;)

最佳答案

我通过如下覆盖 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));
    }
}

为了使用它,你需要做的就是:
    private void Initialize()
    {
            myGrid.Sorted += OnSorted;
    }
    private void OnSorted(object sender, ValueEventArgs<DataGridColumn> valueEventArgs)
    {
    // Persist Sort...
    }

关于.net - 如果 DataGrid 列已排序(而不是排序),我如何收到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8416961/

相关文章:

WPF 异常 WindowStyle.None

用指针对二维数组进行排序的代码

c# - ToString 没有重载方法需要 2 个参数

c# - 我在哪里可以免费找到一个不错的 .NET 选项卡控件?

WPF - 有没有办法从 Canvas.Children 中删除特定的 child ?

java - 将 ArrayList 中的多个元素放入单个数组?

sorting - 如何对关联进行排序(在字段或自定义字段上)

.net - 使用 SqlDataSource 实现 .NET Gridview - 编辑异常

c# - 检测文件是否被另一个进程(或实际上是同一个进程)锁定

c# - WPF 中游戏的恒定帧率