<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文主要介紹Prism的IRegionManager, 主要分析原始碼的執行流程, 來介紹內部實現的幾個核心介面呼叫過程。
通過本文, 你可以熟練的掌握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實現了在指定區域導航頁面並且傳遞引數的過程。那麼接下來主要來通過原始碼來解析整個導航流程,這裡面涉及到多個介面的呼叫過程也會統一的介紹。
該介面當中公開了一個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 { }
瞭解了IRegionManager 是通過INavigateAsync介面呼叫RequestNavigate來進行導航, 那麼我們需要清楚的是, INavigateAsync具體的實現是在哪裡, 這裡就涉及到了一個導航服務的實現介面IRegionNavigationService , 該介面繼承於INavigateAsync
public interface IRegionNavigationService : INavigateAsync { }
也就是說, 我們呼叫RequestNavigate, 其實是通過 IRegionNavigationService的具體實現類來完成整個導航過程, 接下來主要分析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, 可以瞭解到, 其內部的執行邏輯涉及到多個介面, 其中包含了多個介面的使用方法, 例如:
到此這篇關於Prism區域管理器IRegionManager用法介紹的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45