ObservableCollection本身是没有排序Sort功能的,不过我们可以通过冒泡排序来实现,以下是扩展功能:

public static void Sort<T>(this ObservableCollection<T> collection, IComparer<T> comparer)
{
if (collection == null || collection.Count == ) return; int i, j;
T index;
for (i = ; i < collection.Count; i++)
{
index = collection[i];
j = i;
while ((j > ) && (comparer.Compare(collection[j - ], index) == ))
{
collection[j] = collection[j - ];
j = j - ;
}
collection[j] = index;
}
}

这个方法在win7上运行没有问题,排序功能可以正常运行

在win10上排序能正常运行,但是如果是将ObservableCollection绑定到树结构上时,执行排序操作会对展开的树进行收起操作。

就是一个树在展开的时候子节点进行排序,当排序完成后,这棵树会自动收起,不知道什么原因,完全是控件自动处理的。

后面想了一下是不是扩展的排序的方法造成了影响,后面索性就换了一个方法,直接使用ObservableCollection自带的move功能,如下:

public static void Sort<T>(this ObservableCollection<T> collection, IComparer<T> comparer)
{ if (collection == null || collection.Count <= ) return; var lst = collection.ToList();
lst.Sort(comparer);
var count = collection.Count;
for (int m = ; m < count; m++)
{
var dex = collection.IndexOf(lst[m]);
if (dex == m) continue;
collection.Move(dex, m);
}
}

使用新的方法后,排序的时候树就不会自动收缩了。

至于为什么之前的排序方法不行,还需要以后慢慢研究。

最新文章

  1. 通过sougou输入法,解决卡在Setup Wizard(小绿人)界面
  2. LintCode Binary Tree Paths
  3. (转)Sql Server 对锁的初步认识
  4. Hark的数据结构与算法练习之鸽巢排序
  5. DataTable转换为Model实体对象
  6. java学习之多生产者和多消费者
  7. 密码 hdu
  8. css3---线性渐变
  9. webpack打包后该如何访问项目?
  10. ServerSocket详解及线程阻塞_03
  11. linux 性能优化
  12. Java设计模式学习记录-装饰模式
  13. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) E. Tree Folding 拓扑排序
  14. Sortable拖拽排序插件数据筛选
  15. 布尔值运算&amp;集合
  16. java、maven环境搭建
  17. HTTP传输数据压缩
  18. hive on hbase 数据表关联
  19. JUnit 两日游
  20. ubuntu 开启PHP CURL支持

热门文章

  1. detached HEAD state
  2. 【题解】数字组合(NTT+组合 滑稽)
  3. 阿里云ecs docker使用(4)---mongo docker
  4. PYTHON加密解密字符串
  5. linux中查看python的安装路径
  6. save create
  7. PAT 甲级 1128. N Queens Puzzle (20) 【STL】
  8. mini2440移植uboot 2011.03(下)
  9. 主成分分析(PCA)与SVD奇异值分解
  10. 2017SN多校D1T1 loveletter:模拟