WPF系列介绍-依赖属性系统 【01】

        WPF是微软新一代的界面系统,运行于.NET框架之下,由于其发布环境的限制,在快速迭代的互联网时代产品中几乎看不到其身影,但是其采用的思想还是值得学习和借鉴的,其实,也有不少企业级的产品使用其开发,WPF是一套优秀的界面开发引擎,个人觉得它核心东西在于其依赖属性系统和数据绑定功能,正是因为这两套机制的实现,WPF才使传统的数据流反转,真正实现了业务逻辑和界面的分离(现在很多传统的DUI库还是界面驱动数据,比较传统),使得业务的开发简单、高效,使开发者更专注自己的业务逻辑,界面的事情都交给WPF。

        下面,我们具体了解下WPF的依赖属性系统,之所以先开始介绍它,是因为诸如动画系统、数据绑定都得依赖于属性系统才能运转。

         首先,我们来认识下什么是依赖属性?依赖属性有些什么好处?

          既然也叫做属性(Property),那么也和一般的crt属性类似,通过类我们可以设置和访问那些类具有访问权限的依赖属性,但是之所以又叫依赖属性,那么肯定和一般的类(crt属性)属性是有区别的,从其命名,关键在依赖,那么我们可以理解它属于类但又不属于类,感觉这样说起来有点费解,我们这里定义两个概念,类对象和实例对象(类对象代表类整个范畴,而实例对象是类的某个实例化的对象,典型就是new出来的,具体细节可以百度),那么我们可以这样理解依赖属性:注册后的属性属于类对象(可能会属于多中类对象,后面会详细介绍附加属性);通过类方法设置的特定依赖属性值就属于实例对象(实例对同一个依赖属性至少有两个属性值);那么,这样做有什么好处呢?

         WPF大费周章地引入依赖属性,有什么好处呢?

  • 节约内存空间。相同类对象只有一份依赖数性值的拷贝(不管有多少实例对象),而这在WPF叫默认值。
  • 新功能的引入。通过依赖属性的优先级控制,可以实现属性值的校验、动画机制、数据绑定等效果(这样不会损坏原始的依赖属性值,WPF里叫做基值BaseValue)。
  • 附加属性控制。通过附加依赖属性,我们可以把不相干的多个对象联系起来。         

        下面详细介绍依赖属性的构成、原理和使用:

         优先级

         

        上图显示了依赖属性的访问优先级,从上图知道,优先级最高的是动画、其次为表达式(绑定)、然后是本地值,优先级最低的就是默认值(依赖属性注册时设定的默认值);上面的动画和绑定值,其实都是通过表达式计算产生的中间值,考虑这个不算,其实优先级最高就是本地值了。

猜你喜欢

转载自blog.csdn.net/china0851/article/details/40261933