WPF 属性网格在展开时按字母顺序对数组进行排序.无论如何,按数字顺序排序

本文关键字:顺序 排序 数组 数字 无论如何 网格 属性 WPF | 更新日期: 2024-11-10 02:59:36

wpf propertygrid 在展开时按字母顺序对数组进行排序。0,1,10,11...2,20...无论如何,在属性网格中按数字顺序对其进行排序?我尝试过CollectionViewSource.GetDefaultView来定义自定义排序,但这没有做任何事情。

WPF 属性网格在展开时按字母顺序对数组进行排序.无论如何,按数字顺序排序

Use System.Linq Enumerable.OrderBy

它允许您指定任何比较器。

只做你自己的:

public class NumericComparer: IComparer<string>
{
    public int Compare(string s1, string s2)
    {
        if (IsNumeric(s1) && IsNumeric(s2))
        {
            if (Convert.ToInt32(s1) > Convert.ToInt32(s2)) return 1;
            if (Convert.ToInt32(s1) < Convert.ToInt32(s2)) return -1;
            if (Convert.ToInt32(s1) == Convert.ToInt32(s2)) return 0;
        }
    }
    private static bool IsNumeric(string value)
    {
        try 
        {
            int i = Convert.ToInt32(value);
            return true; 
        }
        catch (FormatException) 
        {
            return false;
        }
    }
}

例:

Enumerable.OrderBy(x => x, new NumericComparer());

我找不到按数字顺序对数组进行排序的方法,但我创建了一个解决方法。

步骤 1:创建实现 ICustomTypeDescriptor 的集合。这里描述得很好 http://www.codeproject.com/Articles/4448/Customized-display-of-collection-data-in-a-Propert

步骤2.对属性描述符属性使用以下重写。

public override string DisplayName {
  get {
    string formatStr="D" + this.collection.Count.ToString().Length.ToString();
    return"[" + index.ToString(formatStr) +"]";
  }
}

这会将集合项的显示名称作为 [001][002]...当按属性网格的字母顺序排序时,它有效。