2009-11-18 70 views
0

我有这个使用MVVM的Silverlight Prism应用程序。该模型调用WCF服务并返回一个数据列表。数据应该存储在MVVM中的位置?

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

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

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

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


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

回答

1

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

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

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

4

跟进一般来说,如果我需要保持模型对象周围(我认为大多数事情从WCF服务回来Model对象),我将其存储在我的ViewModel在“模型”属性中。

我见过的人走那么远,在他们的基础视图模型类型创建一个标准的Model属性,像这样(我不这样做,但它很高兴):

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

这是真的了给你。保持它们与其相关的ViewModel接近可能是在这里带走的东西。

相关问题