我需要在iOS中创建一个Tab视图。我试图通过简单地将一个UITabBar添加到MvxViewController来实现这一点但我无法使其工作(参见this question if interested)
我现在正试图使用MVVMCross的方法,Apple似乎把我推向了一个TabController。
在我们的Core项目中,我们有4个ViewModel,它们使用ShowViewModel调用从一个或多个地方显示,并使用customerNumber进行初始化。
在Android和Windows应用商店中,我们为每个ViewModel都有单独的视图。我不想改变我们的Core实现来支持iOS。我将创建一个名为TabbedCustomerViewModel
的新ViewModel,它将具有4个属性,每个属性对应一个托管的ViewModel。
使用在iOS项目中注册的自定义MvxTouchViewPresenter,我可以侦听显示其中一个Customer视图的请求,然后将请求切换到TabbedCustomerViewModel
。我有这个工作,新的ViewModel被创建,并且传递给原始VM的初始化参数将被传递给拦截虚拟机的Init方法。
我遇到的问题是知道如何初始化托管的虚拟机。我假设我将不得不手动ctor,init和Start。有没有人对如何做到这一点有任何想法?
N-25 Tab Tutorial不必担心这个问题,因为它的托管虚拟机不是独立的,因此不具备Init和Start依赖关系
答案 0 :(得分:0)
我现在也在初始化虚拟机。当View加载时,它通过查看ParentViewController检查它是否在选项卡式UI中。
如果是,则在新TabbedCustomerViewModel
上调用自定义方法。我复制了MVVMCross使用的代码并将其添加到新的Method
try
{
mvxViewModel.CallBundleMethods("Init", this.initialisationParameters);
if (reloadedState != null)
{
mvxViewModel.CallBundleMethods("ReloadState", reloadedState);
}
mvxViewModel.Start();
}
catch (Exception exception)
{
throw exception.MvxWrap("Problem initialising viewModel of type {0}", mvxViewModel.GetType().Name);
}
initialisationParameters和reloadedState在初始化时由TabbedCustomerViewModel
存储,以便它可以将其传递给它正在托管的ViewModels