RT
今日需要实现一个类似Windows文件夹资源管理器的功能,在控件内显示文件名或目录名,
当目录存在 1XX 2XX 3XX ... 11XXX 12XX的结构时,在控件内显示内容会变成
1XX
11XX
12X
2XX
...
这固然不满足需求的了 ~
修改如下:
自己定义的Model类型实现接口:IComparable
public int CompareTo(object obj) 实现如下:
public int CompareTo(object obj)
{
string fileA = (obj as YOURMODEL).fileName;
string fileB = fileName;
char[] arr1 = fileA.ToCharArray();
char[] arr2 = fileB.ToCharArray();
int i = 0, j = 0;
while (i < arr1.Length && j < arr2.Length)
{
if (char.IsDigit(arr1[i]) && char.IsDigit(arr2[j]))
{
string s1 = "", s2 = "";
while (i < arr1.Length && char.IsDigit(arr1[i]))
{
s1 += arr1[i];
i++;
}
while (j < arr2.Length && char.IsDigit(arr2[j]))
{
s2 += arr2[j];
j++;
}
if (int.Parse(s1) > int.Parse(s2))
{
return -1;
}
if (int.Parse(s1) < int.Parse(s2))
{
return 1;
}
}
else
{
if (arr1[i] > arr2[j])
{
return -1;
}
if (arr1[i] < arr2[j])
{
return 1;
}
i++;
j++;
}
}
if (arr1.Length == arr2.Length)
{
return 0;
}
else
{
return arr1.Length > arr2.Length ? -1 : 1;
}
}
然后将Model放入List<Model> modelList存储,
调用 modelList.sort() 方法进行排序即可。
如最后需要 ObservableCollection 类型,
return new ObservableCollection<ShowFileInfo>(infos); 即可
以上代码参考
http://www.cnblogs.com/linyechengwei/p/3224200.html