Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何在MVVM中使用视图模型?_Database_Windows Phone 7_Mvvm_Request_Viewmodel - Fatal编程技术网

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

Database 如何在MVVM中使用视图模型?,database,windows-phone-7,mvvm,request,viewmodel,Database,Windows Phone 7,Mvvm,Request,Viewmodel,我正在开发WindowsPhone7应用程序,听说MVVM模式很有用。我在这个网站上读了很多文章和问题,但我得到的只是视图模型作为视图和模型之间的桥梁的解释。如果模型是客户类,那么视图模型被认为是客户的集合,用于数据绑定。这是一个非常简单的用法 如果我想从网络中加载客户,在视图中显示,然后将其存储到本地数据库,我应该将所有逻辑代码都放在视图模型中吗 如果我想从网络加载客户,请在视图上显示,然后 把它存储到本地数据库,我应该把所有的逻辑代码放在 视图模型 如果“从网络加载客户”的逻辑特定于该视图,

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

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

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

如果“从网络加载客户”的逻辑特定于该视图,并且仅限于该视图,那么将其放置到该视图模型中是有意义的

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

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

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

如果“从网络加载客户”的逻辑特定于该视图,并且仅限于该视图,那么将其放置到该视图模型中是有意义的

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


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中可用的内容