Prism 原始碼解讀7-導航
阿新 • • 發佈:2020-04-06
## 介紹
Prism提供了一個非常強大的功能導航,導航的意思就是指定對應的View顯示。這個導航的強大之處有:
- 可以設定導航前後的動作
- 可以指定View例項的生命週期,可以是否導航到新的View例項
- 提供了確認導航介面。
![](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000637632-690027267.png)
- 導航前後均有相應的事件通知
- 提供了回退前進的導航功能
## 導航
直接看程式碼
![1586101856797](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626352-1033163922.png)
![1586101868352](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626383-762316846.png)
可以看到直接通過RequstNavigate來請求,引數是View的TypeName
![1586101921254](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626384-1979015239.png)
轉到了Region.RequestNavigate裡
![1586101954617](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626385-599869801.png)
這邊出現了NavigationService,幾乎所有的導航功能都是在這個服務中實現的,
![1586102614643](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626384-721979010.png)
![1586101993357](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626384-1258463890.png)
![1586102012245](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626384-533630853.png)
這邊將導航的一些資訊封裝成NavigationContext,
![1586102044383](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626408-175311131.png)
在這出現了第一個功能,實現ICon'firm'NavigationRequest介面,確認導航。
最後來到了最重要的函式ExecuteNavigation
![1586102124583](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626412-1411393303.png)
這個函式每一行都很重要,每一行都是一個功能。
![1586102153448](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626421-750942260.png)
呼叫OnNavigateFrom,可以在導航前做一些操作
![1586102182080](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626422-16049822.png)
獲取導航內容,先從Region的View中找,沒找到就到容器中找,然後新增到Region的View。
![1586102280441](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000626426-1333540151.png)
啟用介面
建立條目,儲存條目,主要用來進行前進後退
觸發導航完成事件。
整個導航功能的順序:
![](https://img2020.cnblogs.com/blog/1078802/202004/1078802-20200406000704969-1976947998.png)
## 總結
Prism提供的這個導航功能非常強大,但是程式碼卻不復雜,通過一些簡單的介面,實現了非常強大的