【问题标题】:MVVM DataService and persisting data across ViewModelsMVVM 数据服务和跨视图模型持久化数据
【发布时间】:2014-04-10 18:04:10
【问题描述】:
我正在使用 MVVM Light,我最终在 DataService 中存储了一些数据。发生这种情况是因为我需要一个在 ViewModel 之间共享一些数据(对象列表)的地方(我不希望下一个 ViewModel 再次从 Web 服务获取数据)。
我在这里打破了模式吗?感觉我不应该将数据保存在 DataService 中,它应该只处理数据的访问并将其返回给 ViewModel。但我发现 DataService 被插入到每个 ViewModel 中对于在它们之间共享数据非常有用。
这还能怎么做?
感谢您的帮助,
【问题讨论】:
标签:
windows-phone-7
mvvm
windows-phone-8
mvvm-light
【解决方案1】:
有几个选项:
如果数据在手机上的本地数据库中,最好的办法是将 ID 从 ViewModelA 传递到 ViewModelB。在那种情况下,我相信再次阅读DataService 是可以的。
如果数据是一个rest服务,ViewModelA可以调用GetData(1, true);,其中DataService中的方法签名是GetData(int id, refresh=false)。然后ViewModelA 可以将Id 传递给ViewModelB。当ViewModelB 调用GetData(1) 时,您可以从数据服务返回缓存值。如果由于某种原因缓存值为空,请重新获取。
我现在倾向于遵循这种模式,我曾经将SharedData 单例注入到任何需要共享数据但感觉很臭的视图模型中。就像一个全局变量。对于某些应用程序状态的事情,这可能没问题,但对于共享模型的一部分,感觉不对。 ViewModelB 依赖于 SharedData,如果没有设置,那该怎么办。
我很想知道其他人是如何做到这一点的。