定期从db更新数据并将更改推送到UI

时间:2015-07-07 08:41:43

标签: c# sql-server wpf mvvm

无论用户做什么,我都想自动更新应用程序部分内容中显示的数据。

数据来自返回多行的查询,我使用查询数据循环并填充List<T>个自定义对象。

然后将View绑定到ViewModel中的某个属性,该属性在某种程度上与该列表相关,例如:

  public int numFabricacionesEnCurso { get { return maquina.fabricacionesEnCurso.Where(fb => fb.idEstado == 1).Count(); } }

maquina.fabricacionesEnCurso作为我上面提到的静态列表。

基本上我有两个问题:

  • 自动更新的最佳方法是什么?创建另一个线程,后台工作者......?我应该在哪里创建它们,以便它不会绑定到某个特定的屏幕?

  • 如何将更改推送到视图?我不能通过模型​​调用VM属性的RaisePropertyChanged,因为它不知道VM。我应该将该列表作为属性并在模型本身中实现INotifyPropertyChanged吗?

1 个答案:

答案 0 :(得分:1)

要做的事情就是让两个线程运行。 一个是主UI线程。 第二个是数据库线程。

数据库线程将定期轮询数据库。 如果模型被更改并且将触发EVENT,则更新模型。

viewmodel将订阅模型的EVENT。

当触发事件时,将更新视图模型,从而更新视图。

不要忘记在窗口关闭时取消订阅以避免内存泄漏。

其他方法是使用中介模式。这更安全。