MVVMCROSS-在视图模型层上清除背面堆栈



我正在控制视图型层的背包,因为我的应用程序的导航结构在iOS和android中是相同的。

我有一个"最高视图模型"的概念,对于不应存在的概念。因此,在显示这样的视图模型时,我想关闭现有的模型。

IMvxNavigationService navigationService = GetFromSomewhere();
var existingViewModels = GetViewModelBackStack();
await navigationService.Navigate(newTopmostViewModel);
foreach (var viewModel in existingViewModels)
    await navigationService.Close(viewModel);

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

我是否在 Navigate呼叫之前或之后放置Close都不重要,结果是相同的。

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

我知道可以使用各种片段管理器hacks在视图主持人层上完成这一点,但是我不想求助于这些片段并将尽可能多的逻辑保留在跨平台层。

有任何建议或想法?

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

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

您可以在此处阅读有关演示提示的更多信息

最新更新