2014-03-07 52 views
1

我正在使用MVVM Light,並且我最終在DataService中存儲了一些數據。發生這種情況是因爲我需要一個在ViewModels之間共享一些數據(對象列表)的地方(我不希望下一個ViewModel再次從Web服務獲取數據)。MVVM DataService和持久化數據跨ViewModels

我在這裏打破一個模式?感覺就像我不應該在DataService中保存數據一樣,它應該只處理數據的訪問並將其返回給ViewModel。但是我發現DataService被插入到每個ViewModel中,對於在它們之間共享數據非常有用。

這個怎麼辦?

感謝您的幫助,

回答

0

有幾個選項:

如果數據是在手機上的本地數據庫,你最好的選擇是一個ID傳遞從ViewModelAViewModelB。在這種情況下,我認爲可以再次閱讀DataService

如果數據是休息服務,ViewModelA可能會呼叫GetData(1, true);,其中DataService中的方法簽名是GetData(int id, refresh=false)。然後ViewModelA可以通過IdViewModelB。當ViewModelB撥打電話GetData(1)時,您可以從數據服務中返回緩存的值。如果由於某種原因緩存的值爲空,請再次獲取它。

我傾向於現在遵循這種模式,我用它來將一個SharedData單例注入到需要共享數據但是感覺很臭的任何視圖模型中。就像一個全局變量。對於某些應用程序狀態事件來說,這可能是確定的,但對於共享模型的某些部分來說,它並不正確。 ViewModelB依賴於SharedData,如果沒有設置,那麼什麼。

我會好奇聽到別人如何做到這一點。