Prism区域管理器IRegionManager用法介绍

 更新时间:2022年02月16日 09:26:59   作者:痕迹g  
这篇文章介绍了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用法介绍的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • .net core三种依赖注入方式(原生的依赖注入器,scrutor,autofac)

    .net core三种依赖注入方式(原生的依赖注入器,scrutor,autofac)

    本文介绍了.NET Core中的三种依赖注入方式:原生.NET Core依赖注入容器、原生.NET Core依赖注入容器与Scrutor的结合以及使用Autofac,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • ASP.NET AJAX 1.0 RC开发10分钟图解

    ASP.NET AJAX 1.0 RC开发10分钟图解

    12月15日,ASP.NET AJAX 1.0 RC版发布,我下载安装试用了一下,没有写一行代码,实现了一个简单的AJAX应用,以下为截图说明。
    2008-03-03
  • DataGridView中绑定DataTable数据及相关操作实现代码

    DataGridView中绑定DataTable数据及相关操作实现代码

    DataGridView中绑定DataTable数据及相关操作
    2010-02-02
  • ASP.NET MVC中SignalR的简单应用

    ASP.NET MVC中SignalR的简单应用

    这篇文章主要为大家详细介绍了ASP.NET MVC中SignalR的简单应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • WPF使用StackPanel栈面板布局

    WPF使用StackPanel栈面板布局

    这篇文章介绍了WPF使用StackPanel栈面板布局的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • ASP.NET repeater添加序号列的方法

    ASP.NET repeater添加序号列的方法

    在项目开发过程中,会经常遇到ASP.NET repeater控件添加序号列,有些新手可能还不会,网上搜集整理了一些,需要的朋友可以参考下
    2012-11-11
  • vs2010出现error MSB8008的解决方法

    vs2010出现error MSB8008的解决方法

    这篇文章主要为大家详细介绍了vs2010问题error MSB8008: 指定的平台工具集(v110)未安装或无效的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Web API身份认证解决方案之Basic基础认证

    Web API身份认证解决方案之Basic基础认证

    本文详细讲解了Web API身份认证解决方案之Basic基础认证,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • IIS处理Asp.net请求和Asp.net页面生命周期说明

    IIS处理Asp.net请求和Asp.net页面生命周期说明

    当一个客户端页面访问IIS试图获取一些信息的时候,发生了什么事情?一个请求在通过了HTTP管道后又发生了什么?本文主要是描述这两个过程,即IIS处理asp.net请求和asp.net的页面生命周期。欢迎大家积极拍砖,共同学习,共同进步。
    2011-05-05
  • .NET框架中间语言IL指令大全

    .NET框架中间语言IL指令大全

    IL是微软.NET平台上衍生出的一门中间语言,.NET平台上的各种高级语言(如C#,VB,F#)的编译器会将各自的代码转化为IL。,其中包含了.NET平台上的各种元素,如“范型”,“类”、、“接口”、“模块”、“属性”等等。
    2016-06-06

最新评论