我们尝试构建一个带有几个选项卡的应用程序。作为参考项目,我们使用该示例:http ://slodge.blogspot.co.uk/2013/06/n25-tabs-n1-days-of-mvvmcross.html
为了获得我们需要创建选项卡的 ViewModel 实例,我们使用了该帖子中提到的“HomeViewModel”模式:使用工厂内置的 MVVMCross 创建视图模型?
我不喜欢这种方法是用“新”初始化 ViewModel。据我了解,它跳过了我们真正喜欢的整个 ViewModel-Lifecycle ( https://github.com/slodge/MvvmCross/wiki/View-Model-Lifecycle )。在我们当前的项目中,我们想使用“start()”生命周期方法,但由于使用“new”进行初始化,它从未被调用过。
对我们有用的是这样:
var loaderService = Mvx.Resolve<IMvxViewModelLoader>();
var vm = (UserListViewModel)loaderService.LoadViewModel(new MvxViewModelRequest(typeof(UserListViewModel), null, null, null), null);
所以我的问题是:这是完成这项工作的方式,还是只是一种肮脏的解决方法,并且有更好的解决方案?
更新:我们来到了那个解决方案:
CreateTabFor<SettingsViewModel>("Settings", "settings");
//This method loads the ViewModel
private UIViewController CreateTabFor<TTargetViewModel>(string title, string imageName)
where TTargetViewModel : class, IMvxViewModel
{
var controller = new UINavigationController();
controller.NavigationBar.TintColor = UIColor.Black;
var viewModelRequest = new MvxViewModelRequest(typeof(TTargetViewModel), null, null, null);
var screen = this.CreateViewControllerFor<TTargetViewModel>(viewModelRequest) as UIViewController;
SetTitleAndTabBarItem(screen, title, imageName);
controller.PushViewController(screen, false);
return controller;
}