我有一个简单的ViewModel
,其中包含与ObservableCollection
道具绑定的ItemsSource
。一个ListView
。在预定义的时间段内,ViewModel
将收到更新(快照) - 具有相同Id但值不同的新DataObject
。我现在正在做的是:
- find the index of the item with this id
- if there is no such item: add it to the collection
- if there is - replace it: obsColItems[index] = newDataObject;
我希望ListView
能够反映更改,但只有添加操作可见 - 后续更改(替换项目)不可见。我联系了一个CollectionChange
事件并且它被正确触发但ListView
仍显示初始数据。
我尝试过几件事:
1. remove and then insert the item at the appropriate index - that
leaved me with a bad taste in the mouth (it also messed the current
selected item).
2. After bit of research `BindingList` was mentioned in few similar SO questions
and it did the trick - the `ListView` is now updating, but it seams to
be full of functionality I don't relay need.
ObservableCollection
和项目替换是否有问题以及如何在项目替换后让ListView
更新?
答案 0 :(得分:0)
我等了很长时间才回答(当有人回答他自己的问题时,我讨厌它......)。
observable集合维护DataObject项的快照,并且重写DataObject Equals方法以仅通过ID比较两个对象,不会触发项更改绑定,也不会触发对象内的数据发生更改。 解决方案是将DataObject包装到另一个提供prop的对象中。改变通知。然后所有工作按预期工作 - 替换包装器内的快照将触发项目更改绑定