You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP DataGrid排序场景下Linq查询的优化实现方案咨询

UWP DataGrid 多字段排序优化实现方案

方案1:键选择器映射(无反射,性能最优)

适合字段数量不多、对性能要求高的场景,只需要通过switch表达式匹配列Tag对应的排序字段,无需重复编写排序和赋值逻辑:

// 读取当前点击列的排序字段标识
var sortField = e.Column.Tag.ToString();

// 映射排序字段对应的键选择器
Func<Mountain, object> sortKeySelector = sortField switch
{
    "Country" => item => item.Country,
    "Name" => item => item.Name,
    "Height" => item => item.Height,
    _ => throw new NotSupportedException($"暂不支持对 {sortField} 字段排序")
};

// 统一执行排序并刷新列表
var sortedList = myData.OrderBy(sortKeySelector).ToList();
mydg.ItemsSource = new ObservableCollection<Mountain>(sortedList);

后续新增排序字段时,只需要在switch分支中新增一行映射规则即可。

方案2:动态反射取值(零硬编码,维护成本低)

如果字段数量多、后续迭代会频繁新增排序字段,可通过反射动态读取属性值,无需修改排序逻辑:

var sortField = e.Column.Tag.ToString();
// 反射获取对应属性
var property = typeof(Mountain).GetProperty(sortField);
if (property == null)
    return;

// 动态按属性值排序
var sortedList = myData.OrderBy(item => property.GetValue(item)).ToList();
mydg.ItemsSource = new ObservableCollection<Mountain>(sortedList);

该方案新增排序字段时,仅需要给对应DataGrid列的Tag属性设置为模型类的属性名即可,无需修改排序代码,普通业务场景下反射带来的性能损耗可以忽略。

扩展:支持升序/降序切换

只需增加全局变量记录上一次排序的字段和方向,即可实现点击同一切换排序顺序:

// 类内私有变量,存储排序状态
private string _lastSortedField;
private bool _isAscending = true;

// 排序事件逻辑
private void MyDataGrid_Sorting(object sender, DataGridSortingEventArgs e)
{
    e.Handled = true;
    var currentSortField = e.Column.Tag.ToString();

    // 点击同一列切换排序方向,点击不同列默认升序
    if (currentSortField == _lastSortedField)
    {
        _isAscending = !_isAscending;
    }
    else
    {
        _isAscending = true;
        _lastSortedField = currentSortField;
    }

    var property = typeof(Mountain).GetProperty(currentSortField);
    if (property == null) return;

    // 根据排序方向选择排序方法
    var sortedData = _isAscending 
        ? myData.OrderBy(item => property.GetValue(item)) 
        : myData.OrderByDescending(item => property.GetValue(item));

    mydg.ItemsSource = new ObservableCollection<Mountain>(sortedData);
}

内容的提问来源于stack exchange,提问作者Gregory Bologna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:36:00