使用MVVMCross交换RootViewController

时间:2013-07-18 21:58:32

标签: xamarin.ios mvvmcross

我需要使用MVVMCross实现登录/注销,iOS才能启动。用户登录后,我想关闭视图并使“真实”视图首先查看根控制器。对于注销,我想反过来做同样的事情。每当请求LoginViewModel时,清除根并替换它。

这个Remove ViewController from stack表示有一个ClearTop参数,但看起来它已经在v3中消失了?

然后我发现了这个What is the best way to handle GoBack for the different MvvmCross (v3) platforms并且我实现了这个Presenter:

        public override void Close(IMvxViewModel toClose)
        {
            if (toClose is LoginViewModel)
            {
                ClearBackStack();
                Show(new MvxViewModelRequest() { ViewModelType = typeof(FirstViewModel)});
                return;
            }
            base.Close(toClose);
        }

        public override void Show(MvxViewModelRequest request)
        {
            if (request.ViewModelType == typeof (LoginViewModel))
            {
                ClearBackStack();
            }
            base.Show(request);
        }

这是处理此问题的正确方法吗?是否有更容易的机制(pre-v3之类的)?我应该改为改变ChangePresentation吗?

此外,是否有一种从View调用ShowViewModel的机制?我是否需要解析IMvxViewDispatcher或者是否有更直接的方法?

1 个答案:

答案 0 :(得分:2)

是的,如果你想做自定义演示技巧,那么最简单的方法就是实现你自己的视图演示者。

有关此问题的介绍和一些链接,请参阅How can I implement SplitView in another view in MvvmCross?

您可以直接在视图中编写代码,包括使用已解析的IoC对象的导航逻辑。但是,mvvmCross会尝试鼓励您将此逻辑放在视图模型中 - 尤其是在平台之间更容易共享'逻辑'。