Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 棱镜导航-上一视图和下一视图_C#_Wpf_Mvvm_Prism 4 - Fatal编程技术网

C# 棱镜导航-上一视图和下一视图

C# 棱镜导航-上一视图和下一视图,c#,wpf,mvvm,prism-4,C#,Wpf,Mvvm,Prism 4,我正在使用prism和MVVM开发一个wpf应用程序 我有一个主shell,它有两个区域:菜单区域和主区域 我正试图在菜单区域(包含MenuView)中实现后退和前进按钮,这与我们在任何浏览器中的做法完全相同: 假设我有5个视图:视图1、视图2、视图3、视图4、视图5。 当我启动应用程序时,View1显示在主区域中。目前,我希望这些按钮被禁用。 现在,我选择导航到View3:View3显示在主区域中,然后后向btn变为启用状态(前向btn保持禁用状态)。然后,我导航到View2,它显示在主区域中

我正在使用prism和MVVM开发一个wpf应用程序

我有一个主shell,它有两个区域:菜单区域和主区域

我正试图在菜单区域(包含MenuView)中实现后退和前进按钮,这与我们在任何浏览器中的做法完全相同: 假设我有5个视图:视图1、视图2、视图3、视图4、视图5。
当我启动应用程序时,View1显示在主区域中。目前,我希望这些按钮被禁用。 现在,我选择导航到View3:View3显示在主区域中,然后后向btn变为启用状态(前向btn保持禁用状态)。然后,我导航到View2,它显示在主区域中

现在,当我单击Back btn时,视图3显示在主区域中,并且前向btn被启用。 我点击Forward,现在显示View 2,Forward btn被禁用

我已尝试使用导航日志,如下链接所述:

但是没有成功,因为我做了他们在MenuViewModel中提到的事情,这是在整个应用程序生命周期中在菜单区域中显示的唯一视图(并且只有主区域切换视图)。这就是为什么从未调用OnNavigatedTo方法,因为我从未访问MenuView,这导致navigationService始终为null


主要的一点是,我希望在MenuView中显示这些按钮,这是在整个应用程序生命周期中菜单区域中显示的唯一视图。“后退”和“前进”按钮在主区域的视图之间来回导航。非常感谢您的建议。

我就是这样解决的:

在MenuViewModel中,我有一个对
RegionManager
的引用,因此我可以访问主区域及其导航服务:

var mainregion = _regionManager.Regions[RegionNames.mainregion];
mainregion.NavigationService.Journal.GoForward();

您可以将底部代码用于上一个或前一个区域

xml文件

<Button Command="{Binding GoBackCommand}" Content="GoBack" />
var regionManager=ServiceLocator.Current.GetInstance();
var moduleAView=newURI(“moduleContentView”,UriKind.Relative);
RequestNavigate(“ContentRegion”,moduleAView);
您可以通过上述代码在区域之间导航

private readonly IRegionManager _regionManager;
public ICommand GoBackCommand { get; set; }
public ClassName(IRegionManager regionManager)
{
    _regionManager = regionManager;
    GoBackCommand = new DelegateCommand(GoBack, CanGoBack);
}

private bool CanGoBack()
{  return _regionManager.Regions[RegionNames.MainRegion].NavigationService.Journal.CanGoBack;/*or CanGoForward */}

private void GoBack()
{ _regionManager.Regions[RegionNames.MainRegion].NavigationService.Journal.GoBack();/*GoForward()*/ }
var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
var moduleAView = new Uri("ModuleAContentView", UriKind.Relative);
regionManager.RequestNavigate("ContentRegion", moduleAView);