wpf propertygrid在展开时按字母顺序排序数组。无论如何按数字顺序排序?

时间:2015-03-10 19:45:09

标签: c# arrays wpf sorting

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

2 个答案:

答案 0 :(得分:0)

使用System.Linq Enumerable.OrderBy

它允许您指定任何comparer

做你自己的事:

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 :(得分:0)

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

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

第二步。对PropertyDescriptor属性使用以下覆盖。

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

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