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

WPF DataGrid中double类型数据按数值排序问题求助

解决DataGrid按真实double数值排序的方案

方法1:指定SortMemberPath(最简便)

直接在你的DataGridTextColumn中添加SortMemberPath属性,指向模型里的MoneyTotal字段(实际存储double数值的字段)。这样点击表头排序时,DataGrid会基于这个数值字段排序,而非绑定的格式化字符串。

修改后的XAML代码:

<DataGridTextColumn Header="{DynamicResource moneyTotal}" 
                    Binding="{Binding StringMoneyTotal}" 
                    SortMemberPath="MoneyTotal"/>

方法2:自定义Sorting事件逻辑

如果需要更灵活的排序控制,可通过DataGrid的Sorting事件手动替换排序逻辑:

  1. 在XAML中为DataGrid绑定Sorting事件:
<DataGrid x:Name="invoiceDataGrid" Sorting="invoiceDataGrid_Sorting">
    <!-- 其他列定义 -->
    <DataGridTextColumn Header="{DynamicResource moneyTotal}" Binding="{Binding StringMoneyTotal}"/>
</DataGrid>
  1. 在后台代码中实现事件处理:
private void invoiceDataGrid_Sorting(object sender, DataGridSortingEventArgs e)
{
    // 仅处理目标列的排序
    var targetHeader = FindResource("moneyTotal").ToString();
    if (e.Column.Header.ToString() != targetHeader) return;

    e.Handled = true; // 禁用默认排序逻辑
    var collectionView = CollectionViewSource.GetDefaultView(invoiceDataGrid.ItemsSource) as ListCollectionView;
    if (collectionView == null) return;

    // 清空现有排序规则
    collectionView.SortDescriptions.Clear();
    // 切换排序方向
    var sortDir = e.Column.SortDirection == ListSortDirection.Ascending 
        ? ListSortDirection.Descending 
        : ListSortDirection.Ascending;
    // 添加按MoneyTotal排序的规则
    collectionView.SortDescriptions.Add(new SortDescription("MoneyTotal", sortDir));
    // 更新表头排序箭头状态
    e.Column.SortDirection = sortDir;
}

方法3:通过ICollectionView预设排序

若你的数据源绑定到ICollectionView(如ListCollectionView),可直接在ViewModel层设置排序规则:

// 假设你的原始数据集合
var invoiceList = new ObservableCollection<InvoiceModel>();
// 创建集合视图
var collectionView = new ListCollectionView(invoiceList);
// 添加按MoneyTotal排序的规则(默认升序)
collectionView.SortDescriptions.Add(new SortDescription("MoneyTotal", ListSortDirection.Ascending));
// 将视图绑定到DataGrid
invoiceDataGrid.ItemsSource = collectionView;

这种方式下,无论界面点击排序还是初始加载,都会基于真实double数值排序,同时界面仍显示格式化后的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:00:59