自定义MvxTouchViewPresenter未显示后续ViewModel

时间:2014-05-23 03:53:44

标签: xamarin.ios mvvmcross

我已经编写了一个自定义MvxTouchViewPresenter,可让我显示SlidingPanelRootView)或显示MvxTabBarViewControllerAuthView )。

当我的应用启动时,

  • 如果我告诉它加载TabBarView(AuthView),它会按预期工作。
  • 如果我告诉它加载SlidingPanelView(RootView),它按预期工作。

当我加载AuthView然后尝试ShowViewModel<RootView>()时出现问题...基本上在这种情况下发生的事情是我留在AuthView,即使我看到{{1} }方法已正确运行。

这是方法

CustomPresenter.Show()

完整班级的here's a Gist

在尝试使这项工作适当的时候,我错过了什么?

1 个答案:

答案 0 :(得分:0)

不确定我所做的是&#34;正确&#34;但它现在正在工作。我仍然非常愿意接受更好的答案。

为了简单地解决此问题,我已经完成的工作是在我致电SetWindowRootViewController(_navigationController);之前添加对base.Show(request)的电话

    public override void Show(MvxViewModelRequest request)
    {    
        _navigationController = null;

        var viewController = (UIViewController)Mvx.Resolve<IMvxTouchViewCreator>().CreateView(request);
        RootController = new UIViewController();

        // This needs to be a Tab View
        if (request.ViewModelType == typeof(AuthViewModel))
        {
            _navigationController = new EmptyNavController(viewController);
            RootController.AddChildViewController(_navigationController);
            RootController.View.AddSubview(_navigationController.View);
        }

        else if (request.ViewModelType == typeof (RootViewModel))
        {
            _navigationController = new SlidingPanelsNavController(viewController);
            RootController.AddChildViewController(_navigationController);
            RootController.View.AddSubview(_navigationController.View);

            AddSlidingPanel<NavigationFragment>(PanelType.LeftPanel, 280);
        }
        else
        {
            throw new Exception("They View Type you're trying to show isn't currently supported.");
        }

        // RIGHT HERE
        SetWindowRootViewController(_navigationController);

        base.Show(request);
    }