Mvvm跨关闭到视图模型

问题描述

在MvvmCross中,有没有一种方法可以要求导航服务关闭特定的viewmodel?

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

A B C

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

A -> B -> C

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

有没有办法在C viewmodel中做类似的事情?

_navigationService.Close<A>(this);

解决方法

如果您使用的是Xamarin.Forms(如果不告诉我,我会更新答案,因为它并不那么简单),则在IMvxNavigationService中,您可以使用ChangePresentation(...)方法提示对象,告诉框架您要做什么。

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

Here,您将获得框架提供的不同的即用型提示。

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

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

或者如果A是您的根ViewModel,则可以只使用MvxPopToRootPresentationHint

_navigationService.ChangePresentation(new MvxPopToRootPresentationHint());

HIH