Prism:导航(Navigation)

Prism:导航(Navigation)

在普遍的业务场景当中, 必不可少的是页面切换, 而Prism就可以使用Navigation功能来进行页面导航, 在不同的场景当中会有各种用法, 例如在切换页面验证、传递参数、返回上一页、返回下一页等功能。

导航的基本条件

1.注册显示区域

2.注册导航页面

注册显示区域

首先在mainwindowviewmodel或者viewmodel通过构造函数注入IRegionManager,通过regionManger管理显示区域。

注册导航页面

指定ViewModel或添加别名。(app.xaml.cs或者module里面注册)

 public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //指定ViewModel
            containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>();
            //指定ViewModel并且添加别名
            containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("CustomName");
        }

使用导航

通过区域管理器来管理导航

regionManager.RequestNavigate("RegionName", "ViewName");
  • 第一个参数:RegionName,定义的区域名字(xaml中或者Mainwindow里面)
  • 第二个参数:ViewName,显示视图名字,比如:ViewA(UserControl),如果是通过按钮来显示,传入参数为ViewName字符串类型就可以了

带参数的导航

如果在显示导航区域时,想要传入参数呢?

NavigationParameters paras = new NavigationParameters();
paras.Add("MsgA","大家好,我是A!");
//regionManager.Regions["ContentRegion"].RequestNavigate(viewName, paras);
regionManager.RequestNavigate("ContentRegion",viewName, paras);
  • 第三个参数:为NavigationParameters的参数,是一个键值对

如果在导航区域界面时,怎么接收这些参数呢?

比如上面导航到ViewA,此时可以在ViewAViewModel里面继承INavigationAware或者IConfirmNavigationRequest(继承了前者接口)

image-20240828173202231

继承INavigationAware接口

实现接口的3个方法

image-20240828173858122

image-20240828173704559

image-20240828173717758

  • OnNavigatedTo: 导航完成前, 此处可以传递过来的参数以及是否允许导航等动作的控制。
  • IsNavigationTarget: 调用以确定此实例是否可以处理导航请求(一般返回true)。否则新建实例。
  • OnNavigatedFrom: 当导航离开当前页时, 类似打开A, 再打开B时, 该方法被触发。(拦截)

方法执行流程:

image-20240828174317071

可以看到,想要接收参数,可以在OnNavigatedTo方法中实现

image-20240828174550006

继承IConfirmNavigationRequest接口

在上面实现的三个方法上多实现了一个方法

image-20240828174902996

该方法为切换导航区域时,比如从ViewA到ViewB时,利用此方法可以进行确认是否离开ViewA

image-20240828175119481

执行流程:(当导航到一个区域时)

image-20240828175443068

导航日志记录

这个时候,我们会发现,如果我们导航到了下一个区域,比如ViewB,如果我想要返回到ViewA呢?

IRegionNavigationJournal接口可以记录导航日志,不仅仅是一次,是完整的切换记录,比如A->B->C也是可以返回到A的,类似于撤销

image-20240828175826456

这个导航接口在哪里去记录呢?

依旧还是在请求导航的时候的方法里面里面,每进行一次导航就进行一次记录

image-20240828180302545

posted @ 2024-08-28 19:56  追忆呢  阅读(283)  评论(1编辑  收藏  举报