如何在MVVM中使用视图模型?

时间:2012-11-25 09:27:49

标签: database windows-phone-7 mvvm request viewmodel

我正在开发Windows Phone 7应用程序,并听说MVVM模式很有用。我在这个网站上阅读了很多文章和问题,但我得到的只是将视图模型解释为视图和模型之间的桥梁。如果model是Customer类,则视图模型被认为是用于数据绑定的客户集合。这是一个非常简单的用法!

如果我想从网络加载客户,在视图上显示它,然后将其存储到本地数据库,我应该将所有逻辑代码放在视图模型中吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

  

如果我想从网络加载客户,请在视图上显示,然后   将它存储到本地数据库,我应该将所有逻辑代码放在   查看模型?

如果“从网络加载客户”的逻辑特定于视图而且只是该视图,那么将它放入该ViewModel是有意义的。

如果客户的加载需要与其他视图共享,那么您可能应将其放在启动时或后台加载的数据层中。

ViewModel应该只包含特定于该View的代码。如果应用程序在其他地方需要该数据,它不应包含任何“核心”功能,如加载数据。