Xamarin.ios 使用TabBarPresenter的ViewModel导航
我制作了一个Xamarin.ios 使用TabBarPresenter的ViewModel导航,xamarin.ios,uitabbarcontroller,mvvmcross,Xamarin.ios,Uitabbarcontroller,Mvvmcross,我制作了一个HomeViewModel,其中包含一些其他ViewModels,将在TabParPresenter中显示。这可以正常工作,并且相关的视图模型s在相应的选项卡中正确显示。但是,在ViewModel上,在ctor中有一个复选框,告诉它在某些条件适用时需要导航到SettingsViewModel,它不是HomeViewModel中包含的ViewModel的一部分。 导航事件被TabBarPresenterHost捕获,它只是应用程序的Presenter,如果TabBarPresenter
HomeViewModel
,其中包含一些其他ViewModel
s,将在TabParPresenter
中显示。这可以正常工作,并且相关的视图模型
s在相应的选项卡中正确显示。但是,在ViewModel
上,在ctor
中有一个复选框,告诉它在某些条件适用时需要导航到SettingsViewModel
,它不是HomeViewModel
中包含的ViewModel
的一部分。
导航事件被TabBarPresenterHost
捕获,它只是应用程序的Presenter
,如果TabBarPresenter
存在且不为null,则将其传递给TabBarPresenter.ShowView()
方法。所有这些都发生在TabBarPresenter
加载完成并且SelectedViewController
在ViewDidLoad
中设置之前。因此,TabBarPresenter
依赖于使用SelectedViewController
来推送新的视图
s,我显然得到了一个空引用异常
简言之,我想要的是:
if (conditionForShowingHome == true)
GoToHome();
else
GoToSettings();
然后在SettingsViewModel
内部设置时,我已经设置了返回时所需的内容,您可以返回HomeViewModel
打破这一点的是
视图模型
在加载视图
之前加载,导航事件在加载视图
之前执行。有没有办法解决这个问题?我担心将此代码放在ViewModel构造函数中可能会导致问题
ViewModel构造函数在导航期间被调用,并且不是所有平台都支持在现有导航仍在进行时启动新的导航
为了解决这个问题,我个人选择在导航之前将这种行为放在代码中
- 在正常导航的情况下,这可以进入MvxCommand执行处理程序中
- 在应用程序启动的情况下,我在自定义应用程序启动中执行此操作-请参阅中的一些注释
- 在正常导航的情况下,这可以进入MvxCommand执行处理程序中
- 在应用程序启动的情况下,我在自定义应用程序启动中执行此操作-请参阅中的一些注释