我有使用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?
的跟进答案 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仅包含其副本。