【问题标题】:MvvmCross - clearing backstack at the view model layerMvvmCross - 在视图模型层清除 backstack
【发布时间】:2018-03-29 08:49:01
【问题描述】:

我在视图模型层控制我的后台堆栈,因为我的应用的导航结构在 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,单一活动,所有导航都是基于片段的。页面视图模型对应全屏片段。

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

有什么建议或想法吗?

【问题讨论】:

    标签: android xamarin navigation mvvmcross viewmodel


    【解决方案1】:

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

    我以前也遇到过同样的问题,我处理它的方法是创建演示提示。 (例如:ClearBackStackPresentationHint),由各平台的presenters处理,实现清回栈的逻辑。

    You can read more about presentation hints here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多