使用 MVVM 的棱镜导航 GoBack()

Prism navigation GoBack() using MVVM

我在创建返回按钮时遇到问题(按预期工作:))。

我正在使用 MVVM,并且我有一个名为 ContentRegion 的区域。我的 MainWindow 显示返回按钮和区域,仅此而已。假设我只有 ViewAViewB。我从 ViewAViewB 的基本导航工作正常。在 MainWindow 中,我在启动时将区域设置为 ViewA 并且我有 DelegateCommand 用于返回按钮以及 GoBack()CanGoBack() 方法:

public MainWindowViewModel(IRegionManager regionManager)
{
    _regionManager = regionManager;

    _regionManager.RegisterViewWithRegion("ContentRegion", typeof(AddCorpActView));

    NavigateCommand = new DelegateCommand(GoBack, CanGoBack);

}

private void GoBack()
{
    _regionManager.Regions["ContentRegion"].NavigationService.Journal.GoBack();
}

private bool CanGoBack()
{
    return true;
}

ViewModelAViewModelB中我添加了属性:

private IRegionNavigationService _navigationService;

public void OnNavigatedTo(NavigationContext navigationContext)
{
    _navigationService = navigationContext.NavigationService;
}

当我使用返回按钮从 ViewB 转到 ViewA 时,我没有收到任何错误,但也没有任何反应。

如有任何意见,我们将不胜感激。

问题出在这一行,您在其中使用 view discovery 分配初始视图。

_regionManager.RegisterViewWithRegion("ContentRegion", typeof(AddCorpActView))

视图发现和视图注入不能与日志结合使用,see documentation

The navigation journal can only be used for region-based navigation operations that are coordinated by the region navigation service. If you use view discovery or view injection to implement navigation within a region, the navigation journal will not be updated during navigation and cannot be used to navigate forward or backward within that region.

改为仅使用导航服务。将通过视图发现设置初始视图替换为调用导航服务,例如:

_regionManager.RequestNavigate("ContentRegion", ...)

您还可以将导航服务的初始视图设置移动到您的模块定义中。