一、主要功能
提供同一区域不同页面跳转的功能。
二、实现
首先在App类中进行该导航区域的注册:
containerRegistry.RegisterForNavigation<ViewA>();
containerRegistry.RegisterForNavigation<ViewB>();
containerRegistry.RegisterForNavigation<ViewC>();
containerRegistry.RegisterForNavigation<ViewD>();
containerRegistry.RegisterForNavigation<ViewE>();
然后再Xaml文件中进行导航区域的设置:
<ContentControl Grid.Column="1" prism:RegionManager.RegionName="xRegion"/>
之后在ViewModel中添加属性:
private readonly IRegionManager regionManager;
在ViewModel构造函数中初始化该regionManager属性
public MainViewModel(RegionManager regionManager )
{
this.regionManager=regionManager;
}
最后进行导航
regionManager.RequestNavigate("xRegion", "ViewA");
三、参数传递
RequestNavigate提供几个参数的传递:
void RequestNavigate(string regionName, string target, Action<NavigationResult> navigationCallback, NavigationParameters navigationParameters);
主要就是这四个:
regionName:导航的区域名称
target:导航View的名字,因为之前已经进行了注册,因此直接字符串
navigationCallback:导航的回调函数,当导航结束时调用
navigationParameter:导航的参数(传递形式与DialogResult类似)
四、导航日志
journal 可以提供之前导航的日志记录,调用其中的GoForward和GoBack可以对之前的导航日志记录进行前进后退。主要实现为下:
首先添加journal属性:
public IRegionNavigationJournal journal;
然后journal进行初始化,在之前的导航方法RequestNavigate()中有一个navigateCallback属性
regionManager.RequestNavigate("theRegion", "SecondView", arg =>
{
journal = arg.Context.NavigationService.Journal;
});
然后在导航的命令中调用journal的前进后退方法
public DelegateCommand GoCommand
{
get => new DelegateCommand(() =>
{
journal.GoForward();
});
}
public DelegateCommand BackCommand
{
get => new DelegateCommand(() =>
{
journal?.GoBack();
});
}
GoCommand和BackCommand绑定前台的两个导航按钮,如此即可完成导航日志功能