有序集合我有一個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