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执行处理程序中

  • 在应用程序启动的情况下,我在自定义应用程序启动中执行此操作-请参阅中的一些注释


我担心将此代码放在ViewModel构造函数中可能会导致问题

ViewModel构造函数在导航期间被调用,并且不是所有平台都支持在现有导航仍在进行时启动新的导航

为了解决这个问题,我个人选择在导航之前将这种行为放在代码中

  • 在正常导航的情况下,这可以进入MvxCommand执行处理程序中

  • 在应用程序启动的情况下,我在自定义应用程序启动中执行此操作-请参阅中的一些注释


也许我应该补充一点,TabBarController是从Cirrius会议样本中撕下的。也许我应该补充一点,TabBarController是从Cirrius会议样本中撕下的。我做了自定义应用程序启动,这对我来说是可行的,将不得不研究在Android和WP7上做什么。我做了自定义应用程序启动,这对我来说是可行的,我将不得不考虑在Android和WP7上做些什么。