【问题标题】:MvvmCross CloseTo ViewModelMvvmCross CloseTo ViewModel
【发布时间】:2020-08-26 23:50:41
【问题描述】:

在 MvvmCross 中有没有办法让导航服务关闭特定的 viewModel?

例如,假设我有 3 个视图模型

A B C

我已经从 A 导航到 B 再到 C。

A -> B -> C

在 C 视图中,我按下完成按钮并想返回视图 A。

有没有办法在 C viewModel 中做这样的事情?

_navigationService.Close<A>(this);

【问题讨论】:

  • IMvxNavigationService Close 将关闭特定的视图模型。请检查下面的链接。 github.com/MvvmCross/MvvmCross/pull/3063
  • @WendyZang-MSFT 你是否建议我简单地为我希望在 ViewModel C 中关闭的所有 viewModel 调用 close?

标签: xamarin mvvmcross


【解决方案1】:

如果你在Xamarin.Forms(如果不让我知道,我会更新答案,因为它不是那么简单),在IMvxNavigationService 你有ChangePresentation(...) 方法,它使用提示对象告诉框架你想做什么。

 Task<bool> ChangePresentation(MvxPresentationHint hint, CancellationToken cancellationToken = default(CancellationToken));

Here 您拥有框架提供的不同的开箱即用提示。

要解决您的问题,您可以使用MvxPopPresentationHint:

_navigationService.ChangePresentation(new MvxPopPresentationHint(typeof(A)));

或者如果A 是你的根视图模型,你可以使用MvxPopToRootPresentationHint

_navigationService.ChangePresentation(new MvxPopToRootPresentationHint());

【讨论】:

  • 我没有使用表单。我使用的是 Android 和 iOS。
  • 如果您希望这样做,您似乎必须为 iOS/Android 的平台视图演示者子类化。我将此答案标记为正确,因为目前还没有真正的解决方案。 github.com/MvvmCross/MvvmCross/issues/4032
  • 是的,您必须继承平台上的视图展示器并发送自定义提示。然后取决于您在每个平台上实施关闭的提示。对不起,我没有尽快回答。如果您对此有任何问题,请告诉我,我会尽快完成答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多