Database 如何在MVVM中使用视图模型?
我正在开发WindowsPhone7应用程序,听说MVVM模式很有用。我在这个网站上读了很多文章和问题,但我得到的只是视图模型作为视图和模型之间的桥梁的解释。如果模型是客户类,那么视图模型被认为是客户的集合,用于数据绑定。这是一个非常简单的用法 如果我想从网络中加载客户,在视图中显示,然后将其存储到本地数据库,我应该将所有逻辑代码都放在视图模型中吗 如果我想从网络加载客户,请在视图上显示,然后 把它存储到本地数据库,我应该把所有的逻辑代码放在 视图模型 如果“从网络加载客户”的逻辑特定于该视图,并且仅限于该视图,那么将其放置到该视图模型中是有意义的 如果客户的加载需要与其他视图共享,那么您可能应该将其放置在启动时或后台加载的数据层中 ViewModel应仅包含特定于该视图的代码。如果应用程序在其他地方需要数据,它不应该包含任何“核心”功能,如加载数据 如果我想从网络加载客户,请在视图上显示,然后 把它存储到本地数据库,我应该把所有的逻辑代码放在 视图模型 如果“从网络加载客户”的逻辑特定于该视图,并且仅限于该视图,那么将其放置到该视图模型中是有意义的 如果客户的加载需要与其他视图共享,那么您可能应该将其放置在启动时或后台加载的数据层中Database 如何在MVVM中使用视图模型?,database,windows-phone-7,mvvm,request,viewmodel,Database,Windows Phone 7,Mvvm,Request,Viewmodel,我正在开发WindowsPhone7应用程序,听说MVVM模式很有用。我在这个网站上读了很多文章和问题,但我得到的只是视图模型作为视图和模型之间的桥梁的解释。如果模型是客户类,那么视图模型被认为是客户的集合,用于数据绑定。这是一个非常简单的用法 如果我想从网络中加载客户,在视图中显示,然后将其存储到本地数据库,我应该将所有逻辑代码都放在视图模型中吗 如果我想从网络加载客户,请在视图上显示,然后 把它存储到本地数据库,我应该把所有的逻辑代码放在 视图模型 如果“从网络加载客户”的逻辑特定于该视图,
ViewModel应仅包含特定于该视图的代码。如果应用程序在其他地方需要数据,它不应该包含任何“核心”功能,如加载数据。不,您不应该,请阅读。对于每个类的更改,您只需要一个原因,视图模型应该只负责转换视图上显示的模型信息 单独的服务实现应该负责从数据存储中获取模型实例 例如:
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);
}
}
公共类MyViewModel
{
专用只读ICustomerRetrieval\u retrievalService;
公共MyViewModel(ICCustomerRetrievalService)
{
_retrievalService=retrievalService;
}
公共数字客户
{
获取{return\u retrievalService.GetAllCustomers().Select(AsViewModel);
}
专用CustomerModel AsViewModel(CustomerModel cust)
{
返回新的CustomerServiceWModel(cust);
}
}
您可以看到,服务负责定位客户模型,而视图模型只负责将这些模型转换为可从UI使用的内容。不,您不应该这样做,请阅读相关内容。您只希望每个类更改一个原因,视图模型只应负责转换模型信息n将在视图上显示 单独的服务实现应该负责从数据存储中获取模型实例 例如:
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);
}
}
公共类MyViewModel
{
专用只读ICustomerRetrieval\u retrievalService;
公共MyViewModel(ICCustomerRetrievalService)
{
_retrievalService=retrievalService;
}
公共数字客户
{
获取{return\u retrievalService.GetAllCustomers().Select(AsViewModel);
}
专用CustomerModel AsViewModel(CustomerModel cust)
{
返回新的CustomerServiceWModel(cust);
}
}
您可以看到,服务负责定位客户模型,而视图模型只负责将这些模型转换为UI中可用的内容