MvvmCross - 在视图模型层清除backstack

时间:2018-03-29 08:49:01

标签: android xamarin navigation mvvmcross viewmodel

我在视图模型层控制我的后台堆栈,因为我的应用程序的导航结构在iOS和Android中是相同的。

我有一个"最顶层视图模型"的概念,不应该存在任何backstack。因此,在显示这样的视图模型时,我想关闭现有的视图模型。

IMvxNavigationService navigationService = GetFromSomewhere();

var existingViewModels = GetViewModelBackStack();

await navigationService.Navigate(newTopmostViewModel);

foreach (var viewModel in existingViewModels)
    await navigationService.Close(viewModel);

但是,在Android中,上述代码会导致我的应用程序关闭。

无论我在Close来电之前还是之后放置Navigate并不重要,结果都是一样的。

MvvmCross 5.7.0,单项活动,所有导航都是基于片段的。页面视图模型对应于全屏碎片。

我知道这可以使用各种片段管理器黑客在视图演示者层完成,但我不想诉诸这些并在跨平台层保留尽可能多的逻辑。

有任何建议或想法吗?

1 个答案:

答案 0 :(得分:1)

我理解为什么要将大部分逻辑保留在核心中。但是,每个平台处理导航和后向堆栈的方式不同,这就是表示逻辑属于平台层的原因。

之前我遇到过同样的问题,我处理它的方式是创建演示提示。 (例如:ClearBackStackPresentationHint)由每个平台的演示者处理,并实现清除后栈的逻辑。

You can read more about presentation hints here