Prism 源码解读7-导航
2020-04-06 00:09
666 查看
## 介绍
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提供的这个导航功能非常强大,但是代码却不复杂,通过一些简单的接口,实现了非常强大的功能。
相关文章推荐
- Prism 源码解读4-ViewModel注入
- Prism 源码解读5-数据绑定和命令
- Bootstrap源码解读导航(6)
- Prism 源码解读6-事件聚合
- Bootstrap源码解读(第六弹:导航)
- Prism 源码解读3-Modules加载
- Hadoop源码解读
- Spring:源码解读Spring IOC原理
- ConcurrentHashMap实现原理和源码解读
- AFNetworking 3.0 源码解读(八)之 AFImageDownloader
- Android IntentService源码解读
- GBDT源码解读及实现(二)
- java源码解读之HashMap
- Caffe源码解读:防止梯度爆炸的措施-梯度裁剪
- ThreadLocal使用及源码解读
- SDWebImage源码解读_之SDWebImageDecoder
- 金山卫士界面源码解读及界面库分离(2)
- 第35课:Kafka源码解读中分区数、Consumer并行度等
- JQuery3.1.1源码解读(十三)【event-on】
- laravel 源码解读(2)