1. 程式人生 > >Prism 原始碼解讀7-導航

Prism 原始碼解讀7-導航

## 介紹 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提供的這個導航功能非常強大,但是程式碼卻不復雜,通過一些簡單的介面,實現了非常強大的