我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Prism区域管理器IRegionManager用法介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Prism区域管理器IRegionManager用法介绍

概要

本文主要介绍Prism的IRegionManager, 主要分析源代码的执行流程, 来介绍内部实现的几个核心接口调用过程。

通过本文, 你可以熟练的掌握Prism当中以下接口的作用以及使用方法, 如下所示:

  • IRgionManager
  • INavigationAware
  • INavigateAsync
  • IRegionNavigationService
  • IConfirmNavigationRequest
  • IRegionNavigationContentLoader

阅读本文章, 您需要掌握一下基本概念:

  • 了解Prism的区域导航的大概用法
  • 了解如何在导航中传递参数

正文

首先, 通过一段简单的示例来展示IRegionManager调用导航的业务代码。

//向RegionA区域当中导航ViewA页面, 并且传递参数名Value 值为Hello 的导航参数
var param = new NavigationParameters();
param.Add("Value", "Hello");

regionManager.Regions["RegionA"].RequestNavigate("ViewA", param);

对应在ViewA的DataContext中, 实现如下:

public class ViewAViewModel : INavigationAware
    {
        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            return true;
        }

        public void OnNavigatedFrom(NavigationContext navigationContext)
        {  }

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            //接收导航传递的string类型参数值Value
            var hello = navigationContext.Parameters.GetValue<string>("Value");
        }
    }

通过上面两段代码中, 可以看到, 通过IRegionManager实现了在指定区域导航页面并且传递参数的过程。那么接下来主要来通过源代码来解析整个导航流程,这里面涉及到多个接口的调用过程也会统一的介绍。

IRegionManager

该接口当中公开了一个Regions属性, 其中包含所有注册的区域, 另外则包含一些方法,AddToRegion、RegisterViewWithRegion、RequestNavigate 作用同样是向区域当中指定不同的页面。

通过Regions, 我们可以通过索引器访问不同的区域并且直接调用RequestNavigate方法, 因为IRegion继承于INavigateAsync, INavigateAsync有RequestNavigate方法

public interface INavigateAsync
{
void RequestNavigate(Uri target, Action<NavigationResult> navigationCallback);
void RequestNavigate(Uri target, Action<NavigationResult> navigationCallback, NavigationParameters navigationParameters);
}

public interface IRegion : INavigateAsync
{
}

IRegionNavigationService

了解了IRegionManager 是通过INavigateAsync接口调用RequestNavigate来进行导航, 那么我们需要清楚的是, INavigateAsync具体的实现是在哪里, 这里就涉及到了一个导航服务的实现接口IRegionNavigationService , 该接口继承于INavigateAsync

public interface IRegionNavigationService : INavigateAsync
{
}

也就是说, 我们调用RequestNavigate, 其实是通过 IRegionNavigationService的具体实现类来完成整个导航过程, 接下来主要分析RegionNavigationService实现类。

RegionNavigationService

首先, 简单的描述整个导航需要执行的逻辑, 如下:

1.构建导航的上下文(包含传递的参数,最终导航的页面)

2.循环区域当中所有的活动视图, 并且执行继承于IConfirmNavigationRequest接口的实例
注意: IConfirmNavigationRequest 主要用于在区域导航中的拦截功能。
使用场景: 例如,当前页面显示A, 当你导航B的时候, A如果未保存,可以提示是否切换到B页面。

3.循环区域当中所有的活动视图, 并且执行继承于 INavigationAware 接口的 OnNavigatedFrom方法。
说明:调用OnNavigatedFrom方法,主要告诉活动的页面, 我现在要导航到指定页面, 这样你可以在OnNavigatedFrom当中编写你所需要的业务逻辑。

4.向指定的区域当中添加对应的导航内容, 并且激活显示它。
主要通过 IRegionNavigationContentLoader 接口的 LoadContent 方法来将内容添加到指定区域当中。
注意: 这里会使用到INavigationAware接口当中的IsNavigationTarget方法, 如果该方法设置为true, 代表重用实例, 而不是重新初始化。

5.记录导航日志 IRegionNavigationJournal
说明: 通过导航日志, 我们可以实现在区域当中返回上一页以及下一页的功能。

6.触发INavigationAware接口的OnNavigatedTo, 传递导航的数据上下文(包含导航服务、传递参数等)

7.触发导航的回调方法navigationCallback, 如果存在的话,代码如下所示:

regionManager.Regions["RegionA"].RequestNavigate("ViewA",
                back =>
            {
                if ((bool)back.Result)
                {
                    //代表导航成功
                }
            });

8.Navigating与Navigated 事件为IRegionNavigationService接口当中的成员, 它们分别在导航的不同阶段触发该类事件。
Navigating: 指定区域当中添加完视图后并且激活之前调用
Navigated : 导航完成之后调用该事件

整个流程图,如下图所示:

总结

通过分析RegionNavigationService, 可以了解到, 其内部的执行逻辑涉及到多个接口, 其中包含了多个接口的使用方法, 例如:

  • INavigationAware接口的作用, 如何接收导航传递的参数, IsNavigationTarget可以重用页面实例, OnNavigatedFrom 可以接收导航过程的上下文
  • IConfirmNavigationRequest接口的作用, 可以用于导航的拦截请求
  • IRegionNavigationService接口的作用, 主要用于内部的区域导航服务
  • IRegionNavigationContentLoader接口的作用, 主要用于向指定区域添加内容
  • IRegionNavigationJournal接口的作用, 主要用于区域导航当中记录历史, 用于前后导航的, 返回上一页下一页。

 到此这篇关于Prism区域管理器IRegionManager用法介绍的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Prism区域管理器IRegionManager用法介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

win8资源管理器中功能区应用的详细介绍

Windows 8是由微软将要推出的下一代操作系统,微软win8一大亮点就是用开始屏幕取代了原来开始菜单的功能,并预设了众多程序和应用,让用户直接点击屏幕上应用程序就能快速启动和使用。在资源管理器方面,win8也有诸多特别的设计。Windo
2022-06-04

Linux用户和用户组管理方法介绍

目录一、用户账号的管理1、添加新的用户账号使用useradd命令,其语法如下:2、删除帐号3、修改帐号4、用户口令的管理二、用户组的管理1、增加一个新的用户组使用groupadd命令。其格式如下:2、如果要删除一个已有的用户组,使用grou
2022-06-05

Linux系统中的用户管理方法介绍

本篇内容主要讲解“Linux系统中的用户管理方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统中的用户管理方法介绍”吧!用户管理的配置文件用户信息文件:/etc/passwd密
2023-06-12

nodejs npm包管理的配置方法及常用命令介绍

1. 输入 npm config ls -l 可以查看当前的目录设置 ; cli configslong = true ; builtin config C:Program Files (x86)nodejsnode_modulesnpmn
2022-06-04

windows7资源管理器怎么打开windows7资源管理器怎么打开方法详细介绍

windows7资源管理器怎么打开是一些必须进到资源管理器的用户遇到的问题,当用户们进到win7后发觉我的电脑变成了资源管理器因而想知道怎么打开资源管理器。如果没有标志因此在这里就告诉大家有关windows7资源管理器怎么打开方法详细介绍的
2023-07-11

win8任务管理器如何打开及资源占用查看介绍

如何打开任务管理器? 自认是Windows高手的飘过哈:)。毕竟还有不少新手,尤其是刚体验Windows 8系统的新手,估计还有很多操作找不着北的呢。  1、也是正常操作途径:在桌面任务栏上,鼠标右键点击,选择“任务管理器&rd
2022-06-04

Go项目配置管理神器之viper的介绍与使用详解

viper是一个完整的 Go应用程序的配置解决方案,它被设计为在应用程序中工作,并能处理所有类型的配置需求和格式,下面这篇文章主要给大家介绍了关于Go项目配置管理神器之viper的介绍与使用,需要的朋友可以参考下
2023-02-14

win8系统下安装电源管理8.0风扇除尘方法使用教程介绍

Idea系列新的笔记本如Y400、Z400等机型并无物理的风扇除尘按钮,风扇除尘功能已经整合到了电源管理8.0的界面,需要通过打开电源管理程序来开启风扇除尘功能。 Win8系统安装电源管理8.0风扇除尘如何使用? 1. 安装Win8系统下电
2022-06-04

win8系统中的管理无线网络工具在哪里?用命令实现无线网络管理方法介绍

Windows 8中,“网络和共享中心”取消了“管理无线网络”选项。右下角网络图标,只能显示当前能搜到的热点,如果要管理所有已连接过的概要文件,就比较不方便,只能用命令来实现了。 首先,Win
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录