C# 棱镜导航-上一视图和下一视图
我正在使用prism和MVVM开发一个wpf应用程序 我有一个主shell,它有两个区域:菜单区域和主区域 我正试图在菜单区域(包含MenuView)中实现后退和前进按钮,这与我们在任何浏览器中的做法完全相同: 假设我有5个视图:视图1、视图2、视图3、视图4、视图5。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,它显示在主区域中
当我启动应用程序时,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);