最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Prism區(qū)域管理器IRegionManager用法介紹

 更新時(shí)間:2022年02月16日 09:26:59   作者:痕跡g  
這篇文章介紹了Prism區(qū)域管理器IRegionManager用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概要

本文主要介紹Prism的IRegionManager, 主要分析源代碼的執(zhí)行流程, 來介紹內(nèi)部實(shí)現(xiàn)的幾個(gè)核心接口調(diào)用過程。

通過本文, 你可以熟練的掌握Prism當(dāng)中以下接口的作用以及使用方法, 如下所示:

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

閱讀本文章, 您需要掌握一下基本概念:

  • 了解Prism的區(qū)域?qū)Ш降拇蟾庞梅?/li>
  • 了解如何在導(dǎo)航中傳遞參數(shù)

正文

首先, 通過一段簡(jiǎn)單的示例來展示IRegionManager調(diào)用導(dǎo)航的業(yè)務(wù)代碼。

//向RegionA區(qū)域當(dāng)中導(dǎo)航ViewA頁面, 并且傳遞參數(shù)名Value 值為Hello 的導(dǎo)航參數(shù)
var param = new NavigationParameters();
param.Add("Value", "Hello");

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

對(duì)應(yīng)在ViewA的DataContext中, 實(shí)現(xiàn)如下:

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

        public void OnNavigatedFrom(NavigationContext navigationContext)
        {  }

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            //接收導(dǎo)航傳遞的string類型參數(shù)值Value
            var hello = navigationContext.Parameters.GetValue<string>("Value");
        }
    }

通過上面兩段代碼中, 可以看到, 通過IRegionManager實(shí)現(xiàn)了在指定區(qū)域?qū)Ш巾撁娌⑶覀鬟f參數(shù)的過程。那么接下來主要來通過源代碼來解析整個(gè)導(dǎo)航流程,這里面涉及到多個(gè)接口的調(diào)用過程也會(huì)統(tǒng)一的介紹。

IRegionManager

該接口當(dāng)中公開了一個(gè)Regions屬性, 其中包含所有注冊(cè)的區(qū)域, 另外則包含一些方法,AddToRegion、RegisterViewWithRegion、RequestNavigate 作用同樣是向區(qū)域當(dāng)中指定不同的頁面。

通過Regions, 我們可以通過索引器訪問不同的區(qū)域并且直接調(diào)用RequestNavigate方法, 因?yàn)镮Region繼承于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接口調(diào)用RequestNavigate來進(jìn)行導(dǎo)航, 那么我們需要清楚的是, INavigateAsync具體的實(shí)現(xiàn)是在哪里, 這里就涉及到了一個(gè)導(dǎo)航服務(wù)的實(shí)現(xiàn)接口IRegionNavigationService , 該接口繼承于INavigateAsync

public interface IRegionNavigationService : INavigateAsync
{
}

也就是說, 我們調(diào)用RequestNavigate, 其實(shí)是通過 IRegionNavigationService的具體實(shí)現(xiàn)類來完成整個(gè)導(dǎo)航過程, 接下來主要分析RegionNavigationService實(shí)現(xiàn)類。

RegionNavigationService

首先, 簡(jiǎn)單的描述整個(gè)導(dǎo)航需要執(zhí)行的邏輯, 如下:

1.構(gòu)建導(dǎo)航的上下文(包含傳遞的參數(shù),最終導(dǎo)航的頁面)

2.循環(huán)區(qū)域當(dāng)中所有的活動(dòng)視圖, 并且執(zhí)行繼承于IConfirmNavigationRequest接口的實(shí)例
注意: IConfirmNavigationRequest 主要用于在區(qū)域?qū)Ш街械臄r截功能。
使用場(chǎng)景: 例如,當(dāng)前頁面顯示A, 當(dāng)你導(dǎo)航B的時(shí)候, A如果未保存,可以提示是否切換到B頁面。

3.循環(huán)區(qū)域當(dāng)中所有的活動(dòng)視圖, 并且執(zhí)行繼承于 INavigationAware 接口的 OnNavigatedFrom方法。
說明:調(diào)用OnNavigatedFrom方法,主要告訴活動(dòng)的頁面, 我現(xiàn)在要導(dǎo)航到指定頁面, 這樣你可以在OnNavigatedFrom當(dāng)中編寫你所需要的業(yè)務(wù)邏輯。

4.向指定的區(qū)域當(dāng)中添加對(duì)應(yīng)的導(dǎo)航內(nèi)容, 并且激活顯示它。
主要通過 IRegionNavigationContentLoader 接口的 LoadContent 方法來將內(nèi)容添加到指定區(qū)域當(dāng)中。
注意: 這里會(huì)使用到INavigationAware接口當(dāng)中的IsNavigationTarget方法, 如果該方法設(shè)置為true, 代表重用實(shí)例, 而不是重新初始化。

5.記錄導(dǎo)航日志 IRegionNavigationJournal
說明: 通過導(dǎo)航日志, 我們可以實(shí)現(xiàn)在區(qū)域當(dāng)中返回上一頁以及下一頁的功能。

6.觸發(fā)INavigationAware接口的OnNavigatedTo, 傳遞導(dǎo)航的數(shù)據(jù)上下文(包含導(dǎo)航服務(wù)、傳遞參數(shù)等)

7.觸發(fā)導(dǎo)航的回調(diào)方法navigationCallback, 如果存在的話,代碼如下所示:

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

8.Navigating與Navigated 事件為IRegionNavigationService接口當(dāng)中的成員, 它們分別在導(dǎo)航的不同階段觸發(fā)該類事件。
Navigating: 指定區(qū)域當(dāng)中添加完視圖后并且激活之前調(diào)用
Navigated : 導(dǎo)航完成之后調(diào)用該事件

整個(gè)流程圖,如下圖所示:

總結(jié)

通過分析RegionNavigationService, 可以了解到, 其內(nèi)部的執(zhí)行邏輯涉及到多個(gè)接口, 其中包含了多個(gè)接口的使用方法, 例如:

  • INavigationAware接口的作用, 如何接收導(dǎo)航傳遞的參數(shù), IsNavigationTarget可以重用頁面實(shí)例, OnNavigatedFrom 可以接收導(dǎo)航過程的上下文
  • IConfirmNavigationRequest接口的作用, 可以用于導(dǎo)航的攔截請(qǐng)求
  • IRegionNavigationService接口的作用, 主要用于內(nèi)部的區(qū)域?qū)Ш椒?wù)
  • IRegionNavigationContentLoader接口的作用, 主要用于向指定區(qū)域添加內(nèi)容
  • IRegionNavigationJournal接口的作用, 主要用于區(qū)域?qū)Ш疆?dāng)中記錄歷史, 用于前后導(dǎo)航的, 返回上一頁下一頁。

 到此這篇關(guān)于Prism區(qū)域管理器IRegionManager用法介紹的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

    本文介紹了.NET Core中的三種依賴注入方式:原生.NET Core依賴注入容器、原生.NET Core依賴注入容器與Scrutor的結(jié)合以及使用Autofac,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • ASP.NET AJAX 1.0 RC開發(fā)10分鐘圖解

    ASP.NET AJAX 1.0 RC開發(fā)10分鐘圖解

    12月15日,ASP.NET AJAX 1.0 RC版發(fā)布,我下載安裝試用了一下,沒有寫一行代碼,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的AJAX應(yīng)用,以下為截圖說明。
    2008-03-03
  • DataGridView中綁定DataTable數(shù)據(jù)及相關(guān)操作實(shí)現(xiàn)代碼

    DataGridView中綁定DataTable數(shù)據(jù)及相關(guān)操作實(shí)現(xiàn)代碼

    DataGridView中綁定DataTable數(shù)據(jù)及相關(guān)操作
    2010-02-02
  • ASP.NET MVC中SignalR的簡(jiǎn)單應(yīng)用

    ASP.NET MVC中SignalR的簡(jiǎn)單應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC中SignalR的簡(jiǎn)單應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • WPF使用StackPanel棧面板布局

    WPF使用StackPanel棧面板布局

    這篇文章介紹了WPF使用StackPanel棧面板布局的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • ASP.NET repeater添加序號(hào)列的方法

    ASP.NET repeater添加序號(hào)列的方法

    在項(xiàng)目開發(fā)過程中,會(huì)經(jīng)常遇到ASP.NET repeater控件添加序號(hào)列,有些新手可能還不會(huì),網(wǎng)上搜集整理了一些,需要的朋友可以參考下
    2012-11-11
  • vs2010出現(xiàn)error MSB8008的解決方法

    vs2010出現(xiàn)error MSB8008的解決方法

    這篇文章主要為大家詳細(xì)介紹了vs2010問題error MSB8008: 指定的平臺(tái)工具集(v110)未安裝或無效的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Web API身份認(rèn)證解決方案之Basic基礎(chǔ)認(rèn)證

    Web API身份認(rèn)證解決方案之Basic基礎(chǔ)認(rèn)證

    本文詳細(xì)講解了Web API身份認(rèn)證解決方案之Basic基礎(chǔ)認(rèn)證,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • IIS處理Asp.net請(qǐng)求和Asp.net頁面生命周期說明

    IIS處理Asp.net請(qǐng)求和Asp.net頁面生命周期說明

    當(dāng)一個(gè)客戶端頁面訪問IIS試圖獲取一些信息的時(shí)候,發(fā)生了什么事情?一個(gè)請(qǐng)求在通過了HTTP管道后又發(fā)生了什么?本文主要是描述這兩個(gè)過程,即IIS處理asp.net請(qǐng)求和asp.net的頁面生命周期。歡迎大家積極拍磚,共同學(xué)習(xí),共同進(jìn)步。
    2011-05-05
  • .NET框架中間語言IL指令大全

    .NET框架中間語言IL指令大全

    IL是微軟.NET平臺(tái)上衍生出的一門中間語言,.NET平臺(tái)上的各種高級(jí)語言(如C#,VB,F(xiàn)#)的編譯器會(huì)將各自的代碼轉(zhuǎn)化為IL。,其中包含了.NET平臺(tái)上的各種元素,如“范型”,“類”、、“接口”、“模塊”、“屬性”等等。
    2016-06-06

最新評(píng)論

大足县| 舟曲县| 景德镇市| 栾城县| 锦屏县| 海阳市| 广宗县| 东丰县| 乌拉特后旗| 漠河县| 胶州市| 大安市| 逊克县| 晋江市| 内乡县| 射阳县| 牙克石市| 邮箱| 陵川县| 万全县| 九寨沟县| 汉阴县| 威远县| 诸暨市| 慈溪市| 突泉县| 成都市| 抚顺县| 富民县| 岳阳市| 景宁| 敖汉旗| 勐海县| 新疆| 怀化市| 当涂县| 琼中| 来安县| 天水市| 宁阳县| 永兴县|