• win10 ObservableCollection 排序自动收缩问题


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

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

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

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

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

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

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

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

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

  • 相关阅读:
    Disruptor-NET和内存栅栏
    SSDB:高性能数据库服务器
    PostgreSQL配置优化
    ADO.NET的弹性连接控制[ADO.NET idle connection resiliency]
    2013年度IT博客大赛跻身10强
    MongoDB 聚合管道(Aggregation Pipeline)
    验证码类库CaptchaMvc
    AngularJS SPA Template For Visual Studio
    .NET 4.0 版本号
    利用SSH Filesystem实现远程文件系统
  • 原文地址:https://www.cnblogs.com/sczmzx/p/7661989.html
Copyright © 2020-2023  润新知