我需要使用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或者是否有更直接的方法?
答案 0 :(得分:2)
是的,如果你想做自定义演示技巧,那么最简单的方法就是实现你自己的视图演示者。
有关此问题的介绍和一些链接,请参阅How can I implement SplitView in another view in MvvmCross?
您可以直接在视图中编写代码,包括使用已解析的IoC对象的导航逻辑。但是,mvvmCross会尝试鼓励您将此逻辑放在视图模型中 - 尤其是在平台之间更容易共享'逻辑'。