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

无需自定义代码实现Infragistics XamComboEditor按Excel升序排序

实现XamComboEditor按Excel升序排序ObservableDictionary值的方案

问题背景

你使用Infragistics XamComboEditor控件绑定ObservableDictionary<int, string>,将DisplayMemberPath设为Value,需要对包含特殊字符、数字、字母组合或单一类型的Value,按照Excel的升序排序逻辑(如示例中混合字符串按自然顺序正确排序)进行排序,且希望避免手动处理所有复杂场景。

无需手动实现全场景的解决方案

可以直接复用Windows系统内置的StrCmpLogicalW函数,它正是Excel实现自然排序的底层依赖,能自动处理所有数字、字母、特殊字符的混合排序场景,无需自己编写繁琐的排序规则。

具体实现步骤

  1. 引入Windows API函数
    在项目代码中添加StrCmpLogicalW的DllImport声明:

    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
    private static extern int StrCmpLogicalW(string str1, string str2);
    
  2. 实现Excel风格字符串比较器
    基于API实现IComparer<string>接口,封装排序逻辑:

    public class ExcelStringComparer : IComparer<string>
    {
        public int Compare(string x, string y)
        {
            return StrCmpLogicalW(x, y);
        }
    }
    
  3. 生成排序后的绑定集合
    由于ObservableDictionary本身不支持排序,需将其转换为排序后的集合再绑定:

    • 如果仅需展示Value:
      // 假设你的字典实例名为targetDict
      var sortedValues = targetDict.Values
                                   .OrderBy(val => val, new ExcelStringComparer())
                                   .ToList();
      xamComboEditor.ItemsSource = sortedValues;
      
    • 如果需要保留键值关联(用于后续取值):
      // 先定义键值对模型类
      public class DictItem
      {
          public int Key { get; set; }
          public string Value { get; set; }
      }
      
      var sortedItems = targetDict.Select(kv => new DictItem 
      { 
          Key = kv.Key, 
          Value = kv.Value 
      })
      .OrderBy(item => item.Value, new ExcelStringComparer())
      .ToList();
      
      xamComboEditor.ItemsSource = sortedItems;
      xamComboEditor.DisplayMemberPath = "Value";
      xamComboEditor.ValueMemberPath = "Key";
      
  4. 完成控件绑定
    将排序后的集合赋值给XamComboEditor的ItemsSource,确保DisplayMemberPath和ValueMemberPath配置正确即可。

效果验证

该方案完全对齐Excel的升序规则,自动处理以下场景:

  • 纯数字字符串按数值大小排序(如"10"排在"2"之后)
  • 字母按大小写不敏感逻辑排序(默认行为,如需区分可额外调整)
  • 特殊字符按系统字符集顺序排序
  • 混合类型字符串自然排序(如"Test 5"排在"Test 10"之前)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:53:16