数据应该存储在MVVM中的哪个位置?

时间:2009-11-18 19:39:22

标签: wcf silverlight architecture mvvm prism

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

ViewModel绑定到View,因此ViewModel应该具有List属性。

我应该在MVVM中保留WCF服务返回的数据吗?

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

或者ViewModel在模型完成调用服务器后存储数据?


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

的跟进

2 个答案:

答案 0 :(得分:4)

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

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

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

这完全取决于你。将它们保持在与其相关的ViewModel接近的位置可能就是要把它带走了。

答案 1 :(得分:1)

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

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

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