3

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

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

现在我有点卡在这里关于将数据放在哪里。我使用队列来存储我的值(我总是希望显示最后 100 个值)。现在,我在模型中添加了什么,在 ViewModel 中添加了什么。

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

如果你有按钮和东西,一切都很好,但是如果你有随机事件,这些事件是由“其他东西”而不是视图有效触发的呢?

4

2 回答 2

3

Model的就是你的domain object,它代表实际的data或者information你正在处理的。a 的一个例子Model可能是Car包含 a make,model等的 a colour。这里的主要内容是Model保持information而不是行为。

ViewModel是你的presentation separation层,它可以包裹你的一个或多个Model对象。它是您的ViewModel公开的命令和方法之间的粘合剂,它们维护View状态并可以更改您的状态,Model因为.actionsView

data应该由您的Model, 或维护Models。这将是你的ViewModel,它会暴露它data并为你提供一种View消费它的机制。AnObservableCollection是一种将 的集合暴露给 a 的常用机制,data因为View它是动态的,并在添加、删除或完全刷新项目时提供通知。

理想情况下,您不希望您的对象彼此之间具有强链接,因此要在对象之间进行通信,您可能需要考虑某种调解器设计模式的实现。大多数 MVVM 框架都将其作为一个MediatorEventAggregator消息总线来实现。这些提供了一种机制,其中一个对象publish包含一些数据的通知,一个或多个对象将接收该通知并相应地处理数据。所涉及的对象都不知道谁是 a或涉及谁,他们只知道实现。subscribepublishessubscribedpublishersubscriberMediator

于 2013-11-30T11:58:28.223 回答
1

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

于 2013-11-30T11:39:23.610 回答