【问题标题】:Where should the data be stored in MVVM?数据应该存储在 MVVM 中的什么位置?
【发布时间】:2010-12-18 00:40:14
【问题描述】:

我有这个使用 MVVM 的 Silverlight Prism 应用程序。模型调用 WCF 服务并返回数据列表。

ViewModel 绑定到 View,所以 ViewModel 应该有一个 List 属性。

我是否应该将 WCF 服务返回的数据保存在 MVVM 中?

List 属性是否应该使用它的 getter 调用到 Model 中?其中模型有一个 ReturnListOfData() 方法,该方法返回存储在模型中的数据。

或者 ViewModel 是否在 Model 调用完服务器后存储数据?


这是对Where to put the calls to WCF or other webservices in MVVM?的跟进

【问题讨论】:

    标签: wcf silverlight architecture mvvm prism


    【解决方案1】:

    这实际上取决于您的应用程序的其他方面。例如。 ReturnListOfData() 返回的数据是如何使用的?是否有其他组件对此感兴趣?用户是否更新列表中的元素?它可以创建他以后想要保存的新元素吗?等等。

    在最简单的情况下,您只需让视图模型公开一个 List 属性以供查看,然后将该列表重置为 ReturnListOfData() 返回的任何内容。它可能适用于以下情况:用户只是执行搜索,稍后不对数据执行任何操作,并且只有一个视图对该数据感兴趣。

    但是假设用户希望能够修改该列表的元素。显然,您必须以某种方式跟踪该原始列表中的更改,因此当用户单击保存(或取消)时,您将仅向服务器发送已更改(或添加)的元素,或者如果用户恢复原始元素点击取消。在这种情况下,您需要一个模型对象来保留原始数据,因此您的视图模型仅包含其副本。

    【讨论】:

      【解决方案2】:

      通常,如果我需要保留 Model 对象(我认为从 WCF 服务返回的大多数东西都是 Model 对象),我会将其存储在我的 ViewModel 中的“Model”属性中。

      我见过人们甚至在他们的基本 ViewModel 类型上创建一个标准的 Model 属性,就像这样(我不这样做,但这很好):

      public class ViewModel<ModelType> : INotifyPropertyChanged ...
      {
           //Model Property
           public ModelType Model
           {
                ...
           }
      }
      

      这真的取决于你。让它们尽可能靠近相关的 ViewModel 可能是这里要考虑的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多