2009-11-18 71 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接近可能是在這裏帶走的東西。

相關問題