WPF 属性网格在展开时按字母顺序对数组进行排序.无论如何,按数字顺序排序
本文关键字:顺序 排序 数组 数字 无论如何 网格 属性 WPF | 更新日期: 2024-11-10 02:59:36
wpf propertygrid 在展开时按字母顺序对数组进行排序。0,1,10,11...2,20...无论如何,在属性网格中按数字顺序对其进行排序?我尝试过CollectionViewSource.GetDefaultView来定义自定义排序,但这没有做任何事情。
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]...当按属性网格的字母顺序排序时,它有效。