我目前正在开发一个Windows应用商店应用程序(8.1),应该执行以下操作:
现在我对这里放置数据有点困惑。我使用队列来存储我的值(我总是希望显示最后100个值)。现在,我将什么放入模型以及我将什么放入ViewModel。
E.g。我会将包含数据点的队列放入我的ViewModel吗?如何正确触发“每1秒获取一些数据”的过程。我想到了使用System.Threading.Threads.Timer。我会把它放在哪里?进入MockDataServiceAgent?在这种情况下:如何从ServiceAgent访问我的ViewModel以执行更新?
如果你有按钮和东西,一切都很好,但如果你有随机事件被视觉中的“别的东西”有效地触发了怎么办?
答案 0 :(得分:3)
您的Model
是domain object
,代表您正在处理的实际data
或information
。 Model
的示例可能是Car
包含make
,model
,colour
等的示例。这里的主要内容是{{1}保持Model
而不是行为。
information
是您的ViewModel
图层,它可以包裹您的一个或多个presentation separation
个对象。它是Model
和View
公开命令和方法之间的粘合剂,这些命令和方法维持Model
状态,并可能因View
而改变Model
的状态在actions
。
您的View
应由data
或Model
维护。这将是Models
,它会公开ViewModel
并为您的data
提供机制供您使用View
。 ObservableCollection
是一种将data
集合展示为View
的常用机制,因为它是动态的,并在其添加,删除或完全刷新项目时提供通知。
理想情况下,您不希望您的对象彼此之间具有强大的链接,因此要在对象之间进行通信,您可能需要考虑Mediator design pattern的某些实现。大多数MVVM框架都有一些实现,可以是Mediator
或EventAggregator
消息总线。这些提供了publish
和subscribe
机制,其中一个对象publishes
包含一些数据和一个或多个subscribed
对象的通知将接收该通知并相应地处理数据。所涉及的任何对象都不知道谁是publisher
,subscriber
或涉及谁,他们只知道Mediator
实施。
答案 1 :(得分:1)
您可以将包含数据的队列放在ViewModel
中,作为ObservableCollection
,然后当ObservableCollection
更改时,它可以更新绑定的任何内容。最好保持ServiceAgent
和ViewModel
之间的链接松散耦合,我建议使用SimpleMvvm
的邮件系统,如果有的话,我知道MvvmLight
(另一个Mvvm工具包)有一个。或者您可以使用Mediator模式自己构建一个。或者,如果您不想使用Mediator,请使用IoC容器。只需让您的数据服务流程更新ObservableCollection
,这样就可以取消担心事件的需要(用于更新UI)。