[英]MVVM with continuously updated data
我目前正在開發Windows應用程序(8.1),它應該執行以下操作:
現在我有點卡在這里放置數據。 我使用隊列來存儲我的值(我總是希望顯示最后100個值)。 現在,我將什么放入模型中以及我將什么放入ViewModel中。
例如,我將包含數據點的Queue放入我的ViewModel中嗎? 如何正確觸發“每1秒獲取一些數據”的過程。 我想到了使用System.Threading.Threads.Timer。 我會把它放在哪里? 進入MockDataServiceAgent? 在這種情況下:如何從ServiceAgent訪問我的ViewModel以執行更新?
如果你有按鈕和東西,一切都很好,但是如果你的隨機事件是由“其他東西”而不是視圖觸發的呢?
您的Model
是您的domain object
,它表示您正在處理的實際data
或information
。 Model
一個例子可能是包含make
, model
, colour
等的Car
。這里的主要內容是Model
維護information
而不是行為。
ViewModel
是您的presentation separation
層,它可以包裝一個或多個Model
對象。 它是View
和Model
公開命令和方法之間的粘合劑,它們維護View
狀態,並且可以根據View
上的actions
改變Model
的狀態。
您的data
應由您的Model
或Models
維護。 它將是您的ViewModel
,它將公開該data
並為您的View
提供一種機制來使用它。 ObservableCollection
是一種常見的機制,用於將data
集合暴露給View
因為它是動態的,並在添加,刪除或完全刷新項目時提供通知。
理想情況下,您不希望對象具有彼此強大的鏈接,因此要在對象之間進行通信,您可能需要考慮Mediator設計模式的某些實現。 大多數MVVM框架都有一些實現,可以作為Mediator
或EventAggregator
消息總線。 這些提供了一種publish
和subscribe
機制,其中一個對象publishes
包含一些數據的通知,一個或多個subscribed
對象將接收該通知並相應地處理數據。 所涉及的對象都不知道誰是publisher
, subscriber
或參與者,他們只知道Mediator
實現。
您可以將包含數據的隊列放在ViewModel
,作為ObservableCollection
,然后在更改ObservableCollection
時,它可以更新綁定到的任何內容。 最好保持ServiceAgent
和ViewModel
松散耦合之間的聯系,我建議使用SimpleMvvm
的消息系統,如果有的話,我知道MvvmLight
(另一個Mvvm工具包)有一個。 或者您可以使用Mediator模式自己構建一個。 或者,如果您不想使用Mediator,請使用IoC容器。 只需讓您的數據服務進程更新ObservableCollection
,這應該取消需要擔心事件(用於更新UI)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.