我正在使用MVVM Light,我最终在DataService中存储了一些数据。发生这种情况是因为我需要一个跨ViewModels共享一些数据(一个对象列表)的地方(我不希望下一个ViewModel再次从Web服务获取数据)。
我在这里打破了一个模式吗?感觉我不应该将数据保存在DataService中,并且它应该只处理数据的访问并将其返回到ViewModel。但我发现DataService插入每个ViewModel非常有用,可以在它们之间共享数据。
怎么可能这样做?
感谢您的帮助,
答案 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
,如果没有设置,那么是什么。
我很想知道其他人是如何做到这一点的。