首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对ObservableCollection<T>进行排序,以便我的UI也能看到排序过程?

如何对ObservableCollection<T>进行排序,以便我的UI也能看到排序过程?
EN

Stack Overflow用户
提问于 2011-02-05 18:07:11
回答 1查看 276关注 0票数 3

我有一个列表框,它的项目面板设置为wrappanel。我希望每当向列表框添加新项时,都应该对我的集合进行排序,并且该过程应该在UI上可见。我的意思是,用户应该能够看到这种奇特的效果,以帮助他们识别项目正在被排序。我看过一些关于stackoverflow的帖子,他们建议使用CollectionViewSource。但是,我的项源被绑定到ViewModel中的ObservableCollection。

首先,我写了这段代码。然而,当一个新的集合被绑定时,它是有效的,我看不到容器中的项只是从原始位置移动到新位置的奇特效果:-

代码语言:javascript
复制
 var photoList = PhotosToUpload.ToList<Photo>();
            photoList.Sort(new PhotoSorter());
            PhotosToUpload = new ObservableCollection<Photo>(photoList);

这是我的班级:

代码语言:javascript
复制
 public class PhotoSorter : IComparer<Photo>
    {

        public int Compare(Photo x, Photo y)
        {
            return x.PhotoByteArr.Length - x.PhotoByteArr.Length;
        }
    }

然后我写了一个简单的冒泡排序算法。这达到了预期的效果,但我不知道为什么花了这么长时间。我知道这是任何人都能想到的最低效的算法,但仍然对10个项目进行排序应该不会超过一秒钟。在这里需要4-5秒。

代码语言:javascript
复制
for (int i = 0; i < PhotosToUpload.Count; i++)
            {
                for (int j = 0; j < PhotosToUpload.Count - 1 - i; j++)
                {
                    if (PhotosToUpload[j].PhotoByteArr.Length > PhotosToUpload[j + 1].PhotoByteArr.Length)
                    {
                        Photo photo = PhotosToUpload[j];
                        PhotosToUpload[j] = PhotosToUpload[j + 1];
                        PhotosToUpload[j + 1] = photo;
                    }
                }
            }

有人能告诉我目前我能做的最好的事情是什么吗?为什么只有10个项目,气泡排序就花了这么长时间?

EN

回答 1

Stack Overflow用户

发布于 2011-02-05 19:05:16

要检查更改,请使用CollectionChanged事件。

你的比较器有一个错误:

代码语言:javascript
复制
return x.PhotoByteArr.Length - y.PhotoByteArr.Length;

顺便说一句。你的代码会立即为我执行...也许问题出在你的照相课上?或者你的绑定/事件?

Photo.PhotoByteArr是计算值吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4906239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档