MVVM:如果后台线程不断更改模型怎么办?

时间:2010-06-23 17:48:58

标签: wpf data-binding mvvm

这对我来说是个大问题。我想编写一个从在线WCF服务中获取数据的WPF / MVVM应用程序。

问题是,提取过程必须是每15秒(这是一个时间关键的应用程序)。

有一个不断变化的IEnumerable,每次检查WCF服务时,我都会得到不同的值,因为还有时间数据。

我该怎么做?清除ViewModel中的ObservableCollection可能不对,或者是吗?

2 个答案:

答案 0 :(得分:5)

暂停和恢复ObservableCollection的更新更新可能是一种方法:

见答案:ItemsControl.ItemsSource MVVM performance

通过这种方式,您可以在清理收藏并进行更新时暂停,然后在完成后恢复。这种方法应该可以缓解修改集合并生成大量更改更新事件的问题。

答案 1 :(得分:1)

我认为它应该没问题,只要它不涉及大的变化(如数以千计的项目)并且你管理线程安全。

要在集合中项目数更改时支持自动刷新,请使用ObservableCollection并支持自动刷新对象的属性INotifyPropertyChanged

如果收集大量项目,您可以通过查找旧项目和新项目之间的更改并相应地更新集合来优化此过程,而不是清除集合并使用新数据填充集合。

要管理线程安全,您必须直接/间接地放置任何代码(这包括更改ViewModel属性,然后更新视图)更改Dispatcher.Invoke方法中的视图。