谁应该在MvvmCross中创建视图模型实例
我只想说清楚:我知道MvvmCross在创建视图模型的位置和方式方面非常灵活。我的问题更多的是关注点的适当分离,以简化复杂跨平台应用程序的设计 假设我们有一个包含客户列表和客户详细信息的应用程序。在iPad和Surface上,列表和详细信息显示在同一页上,但在较小的设备上,所选客户的客户列表和详细信息在不同的页面上分开显示。因此,我们有一个PCL,其中包含CustomerListViewModel和CustomerDetailsViewModel。现在,我们应该如何从可移植类库中管理视图模型生存期 我最初是使用CustomerListViewModel实现中的代码完成的,代码如下所示:谁应该在MvvmCross中创建视图模型实例,mvvm,viewmodel,mvvmcross,Mvvm,Viewmodel,Mvvmcross,我只想说清楚:我知道MvvmCross在创建视图模型的位置和方式方面非常灵活。我的问题更多的是关注点的适当分离,以简化复杂跨平台应用程序的设计 假设我们有一个包含客户列表和客户详细信息的应用程序。在iPad和Surface上,列表和详细信息显示在同一页上,但在较小的设备上,所选客户的客户列表和详细信息在不同的页面上分开显示。因此,我们有一个PCL,其中包含CustomerListViewModel和CustomerDetailsViewModel。现在,我们应该如何从可移植类库中管理视图模型生存
public ICommand SelectCustomerCommand
{
get { return new MvxCommand(SelectCustomer); }
}
public void SelectCustomer()
{
if (formFactor == FormFactor.Phone)
{
ShowViewModel<CustomerDetailsViewModel>(new CustomerDetailsViewModel.NavObject(this.SelectedCustomer));
}
else
{
this.CustomerDetails = new CustomerDetailsViewModel(this.SelectedCustomer);
}
}
但是,如果视图模型生存期由演示者控制,我们是否应该尝试将KillMe调用放在演示者的逻辑中?我知道这么小的一段代码没有多大区别,但这难道不是一个优势,可以将其放在presenter的类中并减少代码落后吗?显然,ViewModel不应该处理与视图(屏幕)有关的任何事情 我有一个简单的想法,就是使用一个自定义的presenter,它能够根据ShowViewModel请求创建视图 自定义演示者负责查看,因此您可以测试屏幕方向
关于问题的第二部分: 但是,如果视图模型生存期由演示者控制,我们是否应该尝试将KillMe调用放在演示者的逻辑中?我知道这么小的一段代码并没有多大区别,但这难道不能成为将它放在presenter类中并减少代码落后的优势吗 当前视图模型演示文稿由演示者编排-它获取
ViewModelRequest
对象并决定如何处理它们
但是,它通常不会创建ViewModels,而是:
- 演示者通常创建/显示视图
- 然后,视图创建(或定位)一个视图模型,作为
、OnCreate
或ViewDidLoad
处理的一部分OnNavigatedTo
另一种思考方式是,如果演示者被重命名为
INavigationService
,那么您希望INavigationService
在您的应用程序中拥有哪些角色?谢谢。我将检查您引用的博客文章中的链接。我同意此选项-我更喜欢父虚拟机调用ShowViewModel
(或其他服务),而不是直接在if
语句中创建虚拟机。谢谢。您为我澄清了视图和演示者之间的责任划分。
public void SelectCustomer()
{
ShowViewModel<CustomerDetailsViewModel>(new CustomerDetailsViewModel.NavObject(this.SelectedCustomer));
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
VisibleViewModel.IsVisible(false);
if (e.NavigationMode == NavigationMode.Back)
KillableViewModel.KillMe();
}