MVVM具有不断更新的数据

时间:2013-11-30 11:07:46

标签: c# windows-store-apps simple-mvvm

我目前正在开发一个Windows应用商店应用程序(8.1),应该执行以下操作:

  • 与USB HID设备通话(计算出来)
  • 显示来自该设备的数据(我想使用Oxyplot显示此数据,得到它)
  • 使用MVVM(我选择了SimpleMVVM工具包,因为它已经有VS2013的模板)
  • 创建一个模拟数据提供程序,用于生成随机数据并将其提供给我的ViewModel

现在我对这里放置数据有点困惑。我使用队列来存储我的值(我总是希望显示最后100个值)。现在,我将什么放入模型以及我将什么放入ViewModel。

E.g。我会将包含数据点的队列放入我的ViewModel吗?如何正确触发“每1秒获取一些数据”的过程。我想到了使用System.Threading.Threads.Timer。我会把它放在哪里?进入MockDataServiceAgent?在这种情况下:如何从ServiceAgent访问我的ViewModel以执行更新?

如果你有按钮和东西,一切都很好,但如果你有随机事件被视觉中的“别的东西”有效地触发了怎么办?

2 个答案:

答案 0 :(得分:3)

您的Modeldomain object,代表您正在处理的实际datainformationModel的示例可能是Car包含makemodelcolour等的示例。这里的主要内容是{{1}保持Model而不是行为。

information是您的ViewModel图层,它可以包裹您的一个或多个presentation separation个对象。它是ModelView公开命令和方法之间的粘合剂,这些命令和方法维持Model状态,并可能因View而改变Model的状态在actions

您的View应由dataModel维护。这将是Models,它会公开ViewModel并为您的data提供机制供您使用ViewObservableCollection是一种将data集合展示为View的常用机制,因为它是动态的,并在其添加,删除或完全刷新项目时提供通知。

理想情况下,您不希望您的对象彼此之间具有强大的链接,因此要在对象之间进行通信,您可能需要考虑Mediator design pattern的某些实现。大多数MVVM框架都有一些实现,可以是MediatorEventAggregator消息总线。这些提供了publishsubscribe机制,其中一个对象publishes包含一些数据和一个或多个subscribed对象的通知将接收该通知并相应地处理数据。所涉及的任何对象都不知道谁是publishersubscriber或涉及谁,他们只知道Mediator实施。

答案 1 :(得分:1)

您可以将包含数据的队列放在ViewModel中,作为ObservableCollection,然后当ObservableCollection更改时,它可以更新绑定的任何内容。最好保持ServiceAgentViewModel之间的链接松散耦合,我建议使用SimpleMvvm的邮件系统,如果有的话,我知道MvvmLight (另一个Mvvm工具包)有一个。或者您可以使用Mediator模式自己构建一个。或者,如果您不想使用Mediator,请使用IoC容器。只需让您的数据服务流程更新ObservableCollection,这样就可以取消担心事件的需要(用于更新UI)。