【发布时间】:2023-01-12 23:59:37
【问题描述】:
我有一个 ICollectionView 作为 WPF ListView 的输入源。 CollectionView 中的项目(短信)数量可能高达 10,000。我想根据时间戳向集合视图添加一个排序规则。最新添加的消息应该在最上面。
MyCollectionView.SortDescriptions.Add(new SortDescription("TimeStamp", ListSortDirection.Descending));
问题:如果我使用上述排序标准,是否每次添加新消息时都会进行排序?还是 CollectionView 在内部和我的场景中维护一个排序列表(即,将时间戳作为排序),它只需要将新传入消息的时间戳与最后添加的消息的时间戳进行比较?
【问题讨论】:
-
你没有尝试过它的行为吗?你的实际问题是什么?
-
@Clemens:我的实际问题是我不知道它是如何实现的。对于数量有限的项目(尝试 5-10 个),它对我来说很好用。但我不知道如果我有数千/数百万件物品,它会如何反应。即使在我的情况下,它可以维护一个排序列表,每次添加新项目时是否需要进行完整排序?
-
“'我不知道如果我有一千个物品它会如何反应" - 然后编写一个创建几千个项目的测试程序。问题到底出在哪里?我们无法判断某个解决方案是否适合您。您必须自己判断。
-
@Clemens:问题是我想知道它是如何实现/工作的,但我找不到答案。尝试了解它是不是很糟糕?
-
它比 linq 慢。但是您永远不应该向 UI 呈现数千个项目。始终过滤。考虑最多 200 个左右。那么,如果您的 collectionview 排序速度慢并不重要,用户将不必慢慢滚动浏览大量数据。
标签: c# wpf uicollectionview collectionview collectionviewsource