首页 > 其他分享 >Prism:导航(Navigation)

Prism:导航(Navigation)

时间:2024-08-28 20:19:28浏览次数:7  
标签:Navigation 接口 Prism 区域 参数 ViewA 导航 页面

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

标签:Navigation,接口,Prism,区域,参数,ViewA,导航,页面
From: https://www.cnblogs.com/zhuiyine/p/18385460

相关文章

  • Prism:对话框(Dialog)
    Prism:对话框(Dialog)应用背景对话框实际上是我们应用程序经常用到的一个功能,类如:Show、ShowDialog。可以弹出一个我们指定的窗口,仅此而已。Prism提供了一组对话服务,封装了常用的对话框组件的功能,例如:RegisterDialog/IDialogService(注册对话及使用对话)打开对话......
  • Prism:结语
    Prism:结语prism基本功能也已经学完了,在学习过程中遇到过很多问题,其中就有一点条我就一直困惑,那就是:依赖注入什么是依赖注入:(gpt写的)依赖注入(DependencyInjection,简称DI)是一种设计模式和编程技术,用于实现控制反转(InversionofControl,IoC)。它通过将对象的依赖项从对象内部移到......
  • Prism:事件聚合器
    Prism:事件聚合器Prism框架提供了一个事件聚合器,可以帮助不同模块之间进行解耦和通信。开发人员可以通过发布和订阅事件来实现模块之间的交互。IEventAggregator松耦合基于事件通讯多个发布者和订阅者微弱的事件过滤事件传递参数取消订阅该功能主要作用为,事件聚合器......
  • Prism:框架介绍与安装
    Prism:框架介绍与安装什么是Prism?Prism是一个用于在WPF、XamarinForm、Uno平台和WinUI中构建松散耦合、可维护和可测试的XAML应用程序框架Githubhttps://github.com/PrismLibrary/PrismNuGethttps://www.nuget.org/packages/Prism.WpfVS2022拓展功能:MVVM、依赖......
  • Prism:区域(Region)
    Prism:区域(Region)什么是区域?区域(Region)用于实现模块化应用程序中的视图组织和管理。区域允许您在一个或多个视图容器中动态地加载和卸载视图,从而实现灵活的内容布局和管理。区域的用途动态内容加载:您可以将不同的视图加载到同一个区域中,这样可以实现在运行时动态改变应......
  • vue-router 跳转异常 Error: Navigation cancelled from “/“ to “/home“ with a n
    异常信息:Error:Havigationcancelledfrom"/"to"/home"withanewnavigation ,如下图:原因:    1、这个错误是vue-router内部错误,没有进行catch处理,导致的编程式导航跳转问题,往同一地址跳转时会报错的情况。push和replace都会导致这个情况的发生。   ......
  • Vue编程式导航
    编程式导航和上面说的声明式导航的区别在于,声明式导航是先写好便签,然后进行导航。编程式导航通过代码直接进行了导航。通过this.$router.push()这个方法来实现编程式导航,当然也可以实现参数传递,这种编程式导航一般是用于按钮点击之后跳转。<!DOCTYPEhtml><htmllang="en"......
  • Typecho Joe 导航菜单目录以及搜索关键字回显主题优化版
    Joe是Typecho博客中一款开源免费且非常精美的主题,但是这款主题很早就停止维护了,有些功能作者并没有开发,并且在Typecho更新到1.2.1版本后还出现了一个小BUGJoe主题的知名度很高,所以在原作者停止维护后很多大佬发布过自己魔改的版本,不可否认魔改后的主题BUG基本解决,而且......
  • 个人博客导航如何创建更有个性化?
    个人博客导航如何创建更有个性化?创建个性化博客导航是一个既实用又能体现个人风格的过程。以下是一些步骤和建议,帮助你完成这一过程:一、确定导航需求和内容明确目的:首先,你需要明确博客导航的主要目的是什么,比如是为了方便读者查找特定内容、展示你的博客结构,还是为......
  • 【VUE声明式导航跳转如何传参】router-link查询参数传参&动态路由传参
    VUE声明式导航跳转如何传参文章目录VUE声明式导航跳转如何传参前言一、查询参数传参语法实现步骤1.实现【首页】和【搜索页】的基础点击功能2.实现【首页】向【搜索页】跳转时的传参功能JS中如何获取传值二、动态路由传参语法实现步骤1.实现首页和搜索页的基础功能2.......