1

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

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

然后我发现这是为不同的 MvvmCross (v3) 平台处理 GoBack 的最佳方法,我实现了这个 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 吗?

此外,是否有从视图调用 ShowViewModel 的机制?我需要解决 IMvxViewDispatcher 还是有更直接的方法?

4

1 回答 1

2

是的,如果您想做自定义演示技术,那么最简单的方法是实现您自己的视图演示器。

有关这方面的介绍和一些链接,请参阅如何在 MvvmCross 的另一个视图中实现 SplitView?

您可以直接在视图中自由编写代码,包括使用已解析的 IoC 对象的导航逻辑。然而,mvvmCross 试图鼓励你把这个逻辑放在视图模型中——尤其是这样“逻辑”更容易在平台之间共享。

于 2013-07-19T06:30:18.970 回答