2014-03-07 49 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,如果没有设置,那么什么。

我会好奇听到别人如何做到这一点。