MVVM DataService和ViewModels之间的持久数据

时间:2014-03-07 14:23:35

标签: windows-phone-7 mvvm windows-phone-8 mvvm-light

我正在使用MVVM Light,我最终在DataService中存储了一些数据。发生这种情况是因为我需要一个跨ViewModels共享一些数据(一个对象列表)的地方(我不希望下一个ViewModel再次从Web服务获取数据)。

我在这里打破了一个模式吗?感觉我不应该将数据保存在DataService中,并且它应该只处理数据的访问并将其返回到ViewModel。但我发现DataService插入每个ViewModel非常有用,可以在它们之间共享数据。

怎么可能这样做?

感谢您的帮助,

1 个答案:

答案 0 :(得分:0)

有几个选择:

如果数据位于手机上的本地数据库中,最好的办法是将ID从ViewModelA传递给ViewModelB。在这种情况下,我相信再次阅读DataService是可以的。

如果数据是休息服务,ViewModelA可以致电GetData(1, true);,其中DataService中的方法签名为GetData(int id, refresh=false)。然后ViewModelA可以将Id传递给ViewModelB。当ViewModelB拨打电话GetData(1)时,您可以从数据服务返回缓存的值。如果由于某种原因缓存的值为null,则再次获取它。

我现在倾向于遵循这种模式,我使用SharedData单例注入任何需要共享数据的视图模型,但感觉很臭。就像一个全局变量。对于某些应用程序状态的东西,这可能是好的,但是为了共享模型的一部分,它感觉不对。 ViewModelB取决于SharedData,如果没有设置,那么是什么。

我很想知道其他人是如何做到这一点的。