2012-11-25 29 views
0

我正在開發Windows Phone 7應用程序,並且聽說MVVM模式很有用。我在這個網站上閱讀了很多文章和問題,但我所得到的只是視圖模型作爲視圖和模型之間橋樑的解釋。如果model是Customer類,那麼視圖模型被認爲是用於數據綁定的客戶集合。這是一個非常簡單的用法!如何在MVVM中使用視圖模型?

如果我想從網絡加載客戶,將其顯示在視圖上,然後將其存儲到本地數據庫,我應該將所有邏輯代碼放在視圖模型中嗎?

回答

2

不,你不應該閱讀約Separation of Concerns。您只希望您的每個類的一個原因發生變化,視圖模型只應該負責翻譯要在視圖上呈現的模型信息。

單獨的服務實現應負責從數據存儲獲取模型實例。

例如:

public class MyViewModel 
{ 
    private readonly ICustomerRetrieval _retrievalService; 

    public MyViewModel(ICustomerRetrieval retrievalService) 
    { 
     _retrievalService = retrievalService; 
    } 

    public IEnumerable<CustomerViewModel> Customers 
    { 
     get { return _retrievalService.GetAllCustomers().Select(AsViewModel); 
    } 

    private CustomerViewModel AsViewModel(CustomerModel cust) 
    { 
     return new CustomerViewModel(cust); 
    } 
} 

您可以看到服務負責查找客戶模型,而視圖模型僅僅是這些轉換到從UI使用的東西負責。

1

如果我想從網絡負載的客戶,表明它的觀點,那麼 店呢本地數據庫,我應該把在 視圖模型所有的邏輯代碼?

如果「從網絡加載客戶」的邏輯是特定的視圖和只有該視圖,那麼將它放入該ViewModel是有意義的。

如果客戶的加載需要與其他視圖共享,那麼您可能應該將其放置在啓動時或後臺加載的數據層中。

ViewModel應該只包含特定於該視圖的代碼。它不應該包含任何「核心」功能,如應用程序在別處需要該數據時加載數據。

相關問題