MvvmCross 6.0在关闭当前视图模型之前导航至视图模型

时间:2018-07-29 22:39:38

标签: xamarin xamarin.android mvvmcross

我有一系列简单的屏幕,用户可以在其中看到条目列表(屏幕A),点击创建新条目(屏幕B)和查看新创建条目的屏幕(屏幕C)。

创建新条目(屏幕B)并导航到它之后,我想从堆栈中删除创建屏幕(屏幕B)。新的导航服务中是否有简单的方法可以顺利完成此任务?如果我不必为如此简单的事情创建自定义演示者,那就太好了。

我试图让屏幕B导航到屏幕C,然后关闭自身,但该屏幕恢复为屏幕A。

我试图让屏幕B将结果返回给屏幕A,然后屏幕A将结果取回并导航到屏幕C,但这会导致屏幕在导航发生之前闪烁屏幕A。

1 个答案:

答案 0 :(得分:0)

您的问题的答案位于导航堆栈中。我相信您正在寻找的是RemovePage方法。以下是有关如何操作Xamarin.Forms Navigation Stack的信息。这意味着,一旦导航到屏幕C,您就有可能调用RemovePage(对于屏幕B)。

以上内容是指您将如何在UI层中实现此目的。如果您想留在ViewModel世界中,则应该研究Close上的MvxNavigationService方法(如果我没记错的话,可以在{{1}中调用RemoveByViewModel }。不幸的是,此解决方案要求您拥有要关闭的ViewModel实例,因为您需要将其作为参数传递给方法-如何实现完全取决于您。

编辑:

在ViewModel上调用MvxFormsPagePresenter方法时,可能是Presenter(未经验证的信息)正在调用PopToViewModel,这会弹出所有视图,直到指定的ViewModel。解决方案可以是创建自定义演示者并覆盖Close方法,然后在其中注入自定义逻辑。否则,我建议仅在ChangePresentation

上使用RemovePage方法