網(wǎng)站首頁 編程語言 正文
使用場景
在普遍的業(yè)務場景當中, 必不可少的是頁面切換, 而Prism就可以使用Navigation功能來進行頁面導航, 在不同的場景當中會有各種用法, 例如在切換頁面驗證、傳遞參數(shù)、返回上一頁、返回下一頁等功能。
導航的基本條件
1.注冊顯示區(qū)域
2.注冊導航頁面
1.注冊導航
注冊視圖類型或添加別名, 如果為指定別名,名稱默認為當中類型的名稱
public class ModuleAModule : IModule { public void OnInitialized(IContainerProvider containerProvider) { } public void RegisterTypes(IContainerRegistry containerRegistry) { //添加別名 "CustomName" containerRegistry.RegisterForNavigation<ViewA>("CustomName"); //默認名稱 "ViewB" containerRegistry.RegisterForNavigation<ViewB>(); } }
注冊時,指定ViewModel或添加別名。
public class ModuleAModule : IModule { public void OnInitialized(IContainerProvider containerProvider) { } public void RegisterTypes(IContainerRegistry containerRegistry) { //指定ViewModel containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>(); //指定ViewModel并且添加別名 containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("CustomName"); } }
2.使用導航
正如前面的章節(jié)所講到, Region的注冊以及管理、導航等, 我們可以使用IRegionManager接口,所以,我們現(xiàn)在便可以使用該接口實現(xiàn)導航功能, 如下所示:
IRegionManager regionManager = …; regionManager.RequestNavigate("RegionName", "ViewName");
可以注意點, 我們調(diào)用了IRegionManager接口的RequestNavigate方法, 并且傳遞了兩個參數(shù):
- RegionName: 該參數(shù)為注冊的區(qū)域名稱
- ViewName: 該參數(shù)實際為我們上面注冊過的導航頁, 字符串類型, 對應的是我們注冊頁面的nameof
3.帶參數(shù)導航
正如,我們想要在導航頁前, 傳遞一些參數(shù), 則可以使用NavigationParameters, 如下所示:
var param = new NavigationParameters(); param.Add("Parameter", param); _regionManger.RequestNavigate("RegionName", "ViewName", param); //類似URL地址傳遞參數(shù) _regionManger.RequestNavigate("RegionName", "ViewName?id=1&Name=xiaoming");
疑問?
當我們使用導航為指定區(qū)域注冊視圖時, 我們怎么控制打開的過程? 所以, 下面我們將講解一下
INavigationAware接口。
INavigationAware
該接口包含3個方法, 每個方法中都包含當前導航的上下文, 如下所示:
public void OnNavigatedTo(NavigationContext navigationContext) { } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { }
- OnNavigatedTo: 導航完成前, 此處可以傳遞過來的參數(shù)以及是否允許導航等動作的控制。
- IsNavigationTarget: 調(diào)用以確定此實例是否可以處理導航請求。否則新建實例
- OnNavigatedFrom: 當導航離開當前頁時, 類似打開A, 再打開B時, 該方法被觸發(fā)。
INavigationAware 執(zhí)行流程
獲取導航請求參數(shù)
正如上面所描述, 導航中允許我們傳遞參數(shù), 用于在我們完成導航之前, 進行做對應的邏輯業(yè)務處理。這時候, 我們便可以在OnNavigatedTo方法中通過導航上下文中獲取到傳遞的所有參數(shù)。如下:
public void OnNavigatedTo(NavigationContext navigationContext) { var id = navigationContext.Parameters.GetValue<int>("id"); var name = navigationContext.Parameters["Name"].ToString(); }
IConfirmNavigationRequest
該接口繼承于INavigationAware, 所以, 它多了一個功能: 允許用戶針對導航請求進行攔截。
//多了一個回調(diào)函數(shù), 該值覺得是否攔截該導航請求 void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback);
IConfirmNavigationRequest 執(zhí)行流程
攔截導航請求
當打開新的導航時, 或許有些情況下你需要經(jīng)過用戶進行確認, 這個時候, IConfirmNavigationRequest接口可以滿足需求, 如下:
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback) { bool result = true; if (MessageBox.Show("確認導航?", "溫馨提示", MessageBoxButton.YesNo) == MessageBoxResult.No) result = false; //通過回調(diào)當前返回的確認結果,決定是否啟動該導航 continuationCallback(result); }
Navigation Journal
導航日志, 其實就是對導航系統(tǒng)的一個管理功能, 理論上來說, 我們應該知道我們上一步導航的位置、以及下一步導航的位置, 包括我們導航的歷史記錄。以便于我們使用導航對應用程序可以靈活的控制。
IRegionNavigationJournal
該接口包含以下功能:
- GoBack() : 返回上一頁
- CanGoBack : 是否可以返回上一頁
- GoForward(): 返回后一頁
- CanGoForward : 是否可以返回后一頁
1.示例(返回上一頁)
當導航日志當中,包含上一頁的歷史記錄, 如下所示, D的前面有ABC的記錄,所以對于D而言, 它可以返回上一頁, 所以CanGoBack 為True。
2.示例(返回下一頁)
當導航日志當中,包含下一個的歷史記錄,如下所示,D的后面有E的記錄,所以對于D而言,它可以返回下一頁,所以CanGoForward 為True。
原文鏈接:https://www.cnblogs.com/zh7791/p/14140905.html
相關推薦
- 2022-05-17 MacOS下如何配置多JDK,配置Jdk 1.8 jdk 11和jdk17共同管理
- 2022-03-27 centos7安裝mongo數(shù)據(jù)庫的方法(mongo4.2.8)_MongoDB
- 2022-09-17 Python高效處理大文件的方法詳解_python
- 2022-08-06 Flutter?隊列任務的實現(xiàn)_Android
- 2022-07-13 Sybase使用Spring的只讀事物報 Use ‘set readonly off‘ to exe
- 2022-07-23 C語言簡明分析指針與引用的具體用法_C 語言
- 2022-11-28 C語言中getchar()函數(shù)的用法小結_C 語言
- 2022-04-21 Tomcat中catalina.out?和?catalina.log的區(qū)別和用途詳解_Tomcat
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支