【发布时间】:2012-02-06 03:35:09
【问题描述】:
我寻找一种方法来观察集合的变化,而不使用索引。我知道何时从源集合中添加和删除项目,但该集合不使用索引(它是一种自定义类型的哈希集,带有添加/删除通知)。项目以不确定的顺序填充到列表中,使用索引没有多大意义,所以我试图完全避免它。但我还是要把这个列表绑定到一个视图,所以最终会有一些项目的排序。我的目标是在一个集合视图中进行所有排序。
问题是,是否有一种方法可以在无索引源集合上创建一个集合视图,并且仍然让 UI 能够有效地响应被删除和添加的项目,而无需每次都重新构建列表。我不确定我在这里是否有意义。我的目标是摆脱索引,但仍然受益于 collectionchanged-events 和 collectionview-ordering。可能吗?
更新
我尝试实现自定义 ICollectionView,例如 SetCollectionView(HashSet set),但由于某种原因无法正常工作。反正还没有。
另一种选择可能是实现一个自定义的 ReadOnlyObservableCollection-wrapper,并在 GetEnumerator 上进行一些自定义排序。我还没有测试过。在提取 NotifyCollectionChanged 事件的索引之前,我必须根据选择的顺序对列表进行排序,但这应该可以。
【问题讨论】:
-
如果不是索引,什么定义您的订单?哈希集是一种明确无序的数据结构。
-
如果一个 HashSet 是无序的,那么你怎么知道要删除哪些项目 Andreas..?以及为什么您仍然想要一个无索引的自定义集合..??
-
在我的情况下,我对项目的位置不是很感兴趣,除非它们是集合/集合的一部分。排序取决于表示层和视图层。删除项目时,我没有使用 RemoveAt(0) 而是 Remove(item)。
标签: c# .net collections view set