有序集合我有一个SortedObservableCollection
类(最初是基于this)。这也正是它的承诺 - 这是一个泛型集合,它实现INotifyCollectionChanged
并保持其在排序顺序元素(根据提供IComparer
)。订单仅在插入时进行检查,但是 - 插入项目时,将插入集合中的正确位置。初始化从XAML
但是我遇到的一个重大问题,而试图从XAML,像这样的语法初始化集合(该Items
属性为SortedObservableCollection<MyItem>
型,Priority
是排序键):
<my:SomeElement.Items>
<my:MyItem Priority="0">
<my:MyItem Priority="2">
<my:MyItem Priority="1">
</my:SomeElement.Items>
这将导致集合与项目2,1,0,但它导致秩序1,2,0,
我花了相当一段时间来发现原因:集合项目是第一次构建,然后添加到集合,只有那么他们的属性的价值assig斯内德。
我找不到这种行为在任何地方记录和我同意它并不真正的问题通常。但在我的情况下,Priority
属性始终为值0,所以排序完全不会发生(实际上,项目的插入顺序与它们在XAML中的顺序相反)。在排序发生后,Priority
被初始化。
你遇到自己这种行为?为什么XAML是这样实现的?我该如何解决这个问题?
我能想到的唯一的解决办法是让项目实施INotifyPropertyChanged
,然后订阅它在Add
方法(必要时再更新的顺序),但我想这会带来更多的麻烦比它的价值(性能,内存泄漏......)。
感谢您的帮助!
我不认为这会奏效。该集合主要用作其他控件的数据源,这意味着它不会要求更新,而是等待它们。因此我无法知道收藏品何时完全构建。 – 2011-04-03 08:06:31
我想它应该无论如何工作。只要确保你有你的ObservableCollection实现提升适当的事件。 – 2011-04-03 08:17:52
最简单的方法可能(取决于您的实现)在列表排序后提出重置更改操作。我更新了我的帖子以反映这一点。 – 2011-04-03 08:24:35