[Prism] Navigate

一、主要功能

        提供同一区域不同页面跳转的功能。

二、实现

        首先在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绑定前台的两个导航按钮,如此即可完成导航日志功能

猜你喜欢

转载自blog.csdn.net/weixin_43163656/article/details/127904798