【问题标题】:MVVM: What if the model is changed constantly by a background thread?MVVM:如果模型被后台线程不断更改怎么办?
【发布时间】:2010-06-23 17:48:58
【问题描述】:

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

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

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

我会怎么做呢?清除 ViewModel 中的 ObservableCollection 是不对的,是吗?

【问题讨论】:

  • 是物品的数量变化,还是只是物品的数据?
  • 两者都是,所有数据都会根据现实世界的事件不断波动。

标签: wpf data-binding mvvm


【解决方案1】:

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

查看答案:ItemsControl.ItemsSource MVVM performance

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

【讨论】:

  • 非常感谢。我现在将立即实现这个类,这太棒了。 :-)
【解决方案2】:

我认为它应该没问题,只要它不涉及大的更​​改(如数千个项目)并且您管理线程安全。

要在集合中的项目数量发生变化时支持自动刷新,请使用ObservableCollection 并支持在您实现的对象属性上自动刷新INotifyPropertyChanged

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

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

【讨论】:

  • 我担心这就是答案...实际上我希望有一些方法可以在我进行更新时停止屏幕刷新。无论如何+1,谢谢你的帮助! :-)
猜你喜欢
  • 1970-01-01
  • 2017-02-11
  • 2023-04-09
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
相关资源
最近更新 更多