Prism 源码解读2-View的加载和控制

时间:2020-03-31 11:09:13   收藏:0   阅读:75
原文:Prism 源码解读2-View的加载和控制

 


回到顶部

介绍

上一篇介绍了Region,这一篇跟Region息息相关,讲一下Region中View的加载方式及控制。

回到顶部

4、ViewDiscovery

在创建好Region后需要将View添加到Region中。先补充几个概念

在上一篇将了如何创建Region,现在让我们看看Region类是什么

技术分享图片

技术分享图片

这是一个View集合,集合改变会触发CollectionChanged事件

技术分享图片

其完全依赖ObservableCollection对象

技术分享图片

技术分享图片

这是一个行为集合,每当添加进行为的时候,会主动调用Attach()

技术分享图片

下面来看一个好玩的行为AutoPopulateRegionBehavior

技术分享图片

可以看到这个行为对RegionViewRegistry有依赖,这个是通过构造注入的方式注入的。

技术分享图片

该RegionViewRegistry保存着所有的View,是名副其实的Registry.

技术分享图片

该Registry有一个事件ContentRegistered,

技术分享图片

每当调用这个方法的时候就会触发这个事件。

不能跑偏了,回到AutoPopulateRegionBehavior

技术分享图片

在行为Attach的时候,已经对RegionViewRegistry进行了订阅。

技术分享图片

技术分享图片

看看this.Region.Add()

技术分享图片

技术分享图片

技术分享图片

这个ItemMetadataCollection的改变会影响Views和ActiveViews

技术分享图片

首先它是一个ObservableCollection,

技术分享图片

技术分享图片

其次ViewCollection就是依赖ItemMetadataCollection创建的,所以改变自然会影响ViewCollection

那这个VIewCollection是怎么来影响界面的呢,这就要看看另一个行为RegionActiveAwareBehavior

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

至此可能会一头雾水,这讲了什么啊,一会是Region,一会是Behavior,到底想说什么啊?其实就是讲了View是如何被自动注入到对应的Region。

下面让我们跟着Samples中的ViewDiscovery并结合刚刚讲的源码梳理一下。

技术分享图片

技术分享图片

技术分享图片

技术分享图片

可以看到就是调用RegionViewRegistry中Register‘VIew‘With‘Region方法

可以看出为什么Region有这么强大的功能就是因为Prism给Region提供了很多的行为,行为作为WPF的一个特性,其作用是非常强大的。后面的View生命周期管理也是通过行为来完成的

回到顶部

5、ViewInjection

View手动加载到Region,通过一个点击事件,通过RegionManager的Regions属性添加View

技术分享图片

这个就更简单了,因为没有走RegionVIewRegistry,而是直接通过Region添加View,会直接添加到对应的RegionView上,然后通过RegionActiveAwareBehavior显示,上面有就不再详尽叙述了。

回到顶部

6、ViewActivationDeactivation

激活或停用View

这个也不多BB直接看怎么调用

技术分享图片

首先先用手动的方式向Region中添加两个View

技术分享图片

就是两个方法Activate和Deactivate

技术分享图片

这实现也太巧妙了吧,通过ItemMetadata直接影响了View和ActiveView,然后通过RegionActiveAwareBehavior行为实现。真帅

技术分享图片

就不再叙述了。

回到顶部

总结

本章主要讲了View的加载方式,可以手动加载,可以自动加载,并可以控制View的Activate和DeActivate。其主要实现都是依靠行为,也从侧面反映出行为的强大,行为能做的事情实在太多了。下一章会对Modules的实现进行介绍。

原文:https://www.cnblogs.com/lonelyxmas/p/12603241.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!