win10 ObservableCollection 排序自动收缩问题
2024-09-29 23:02:21
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);
}
}
使用新的方法后,排序的时候树就不会自动收缩了。
至于为什么之前的排序方法不行,还需要以后慢慢研究。
最新文章
- 通过sougou输入法,解决卡在Setup Wizard(小绿人)界面
- LintCode Binary Tree Paths
- (转)Sql Server 对锁的初步认识
- Hark的数据结构与算法练习之鸽巢排序
- DataTable转换为Model实体对象
- java学习之多生产者和多消费者
- 密码 hdu
- css3---线性渐变
- webpack打包后该如何访问项目?
- ServerSocket详解及线程阻塞_03
- linux 性能优化
- Java设计模式学习记录-装饰模式
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) E. Tree Folding 拓扑排序
- Sortable拖拽排序插件数据筛选
- 布尔值运算&;集合
- java、maven环境搭建
- HTTP传输数据压缩
- hive on hbase 数据表关联
- JUnit 两日游
- ubuntu 开启PHP CURL支持