wpf propertygrid在展开时按字母顺序对数组进行排序。 0,1,10,11 ...... 2,20 ... 无论如何要在propertygrid中按数字顺序排序?我已经尝试过CollectionViewSource.GetDefaultView来定义自定义排序,但是没有做任何事情。
答案 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属性使用以下覆盖。
public override string DisplayName {
get {
string formatStr="D" + this.collection.Count.ToString().Length.ToString();
return"[" + index.ToString(formatStr) +"]";
}
}
&#13;
这会将集合项的显示名称设置为[001] [002] ...当按属性网格按字母顺序排序时,它会起作用。