DependencyProperty深入浅出
写这篇心得之前,看到博友一句话:需求是推动发展的原动力。
说得好,说的棒,说到了点子上,说到了心里去;
好我们开始
最初的世界是简单的,甚至比单细胞动物还简单:
普通属性定义
public class Cell{
private double _Size;
public double Size{get;set;}
}
Size属性是以Cell对象作为‘宿主‘,随着生物进化,出现多细胞生物,腔肠动物,棘皮动物,扁形动物,带脊柱鱼类,猿,类人猿,原始人,人...团体、政党、社会
国家、世界、宇宙...
Cell不不断进化演化发展中,对象变得异常复杂庞大
回过头来看看依赖属性到底要解决普通属性所不能解决的什么问题呢?

1. 派生类原原本本继承了父类的所有属性,公共的、私有的;而且许多属性直接间接被继承来却基本不会被应用,每个属性实例化后对象的复杂与臃肿成为需要解决问题。
2. 属性的变更不能及时反馈到性状,就好比人的身体的某个细胞破损,神经系统不会向大脑反馈任何信息。
依赖属性为解决普通属性存在的这些问题,当然不限于这些问题
在WPF中,依赖对象的概念被DependencyObject类实现;依赖属性的概念则由DependencyPorperty类实现。
必须使用依赖对象作为依赖属性的宿主,二者结合起来,才能实现完整的Binding目标被数据所驱动。DependencyObject具有GetValue和SetValue两个方法,用来获取/设置依赖属性的值。DependencyProperty必须以DependencyObject为宿主、借助它的SetValue和GetValue方法进行写入和读取。因此,想用自定义的DependencyProperty,宿主一定是DependencyObject的派生类。
总结下DependencyProperty实例的声明特点和使用:
1. 变量由public static readonly三个修饰符修饰
2. DependencyProperty 类型
3. 实例使用DependencyProperty.Register方法生成。*而非new操作符得到*
4.使用SetValue和GetValue方法进行写入和读取
对比下普通属性定义与依赖属性定义
public class Cell{
//定义一个SizeProperty依赖属性
public static readonly DependencyProperty SizeProperty=DependencyProperty.Register("Size",typeof(double),typeof(Cell));
//普通属性定义
private double _Size;
public double Size{get;set;}
}
现在使用这个最简单的依赖属性
Cell cell=new Cell();
cell.SetValue(Cell.SizeProperty,textbox1.Text);
textbox2.Text=(double)cell.GetValue(Cell.SizeProperty);
这样使用依赖属性,所有人都会有意见:可不可以像访问普通属性那样简单方式访问依赖属性
为依赖属性添加一个CLR属性的外包装:
public class Cell{
//定义一个SizeProperty依赖属性
public static readonly DependencyProperty SizeProperty=DependencyProperty.Register("Size",typeof(double),typeof(Cell));
public double Size{
get{return (double)GetValue(SizeProperty)};
set{SetValue(SizeProperty,value);}
}
于是,我们也可以这样访问依赖属性了
Cell cell=new Cell();
cell.Size=textbox1.Text;
textbox2.Text=cell.Size;
当敲多了依赖属性的CLR属性的外包装定义,写起来比普通属性定义麻烦,有没有简单办法
vs环境,敲出p+tab+tab,即可自动生成;
备注:
prop:CLR属性
propa:附加属性
propdp:依赖属性
这篇博客值得推荐,深入浅出,易学易懂
http://www.cnblogs.com/Zhouyongh/archive/2009/09/10/1564099.html
DependencyProperty深入浅出的更多相关文章
- [深入浅出Windows 10]模拟实现微信的彩蛋动画
9.7 模拟实现微信的彩蛋动画 大家在玩微信的时候有没有发现节日的时候发一些节日问候语句如“情人节快乐”,这时候会出现很多爱心形状从屏幕上面飘落下来,我们这小节就是要模拟实现这样的一种动画效果.可能微 ...
- [深入浅出Windows 10]实现饼图控件
13.2 实现饼图控件 上一小节讲解了动态生成折线图和区域图,对于简单的图形这样通过C#代码来生成的方式是很方便的,但是当我们的图表要实现更加复杂的逻辑的时候,这种动态生成的方式就显得力不从心了,那就 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 【深入浅出jQuery】源码浅析2--奇技淫巧
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- 深入浅出Struts2+Spring+Hibernate框架
一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...
- DOM 事件深入浅出(二)
在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...
- DOM 事件深入浅出(一)
在项目开发时,我们时常需要考虑用户在使用产品时产生的各种各样的交互事件,比如鼠标点击事件.敲击键盘事件等.这样的事件行为都是前端DOM事件的组成部分,不同的DOM事件会有不同的触发条件和触发效果.本文 ...
- 深入浅出node(2) 模块机制
这部分主要总结深入浅出Node.js的第二章 一)CommonJs 1.1CommonJs模块定义 二)Node的模块实现 2.1模块分类 2.2 路径分析和文件定位 2.2.1 路径分析 2.2.2 ...
- IOS 网络-深入浅出(一 )-> 三方SDWebImage
首要我们以最为常用的UIImageView为例介绍实现原理: 1)UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显 ...
随机推荐
- 数学 赛码 1010 GCD
题目传送门 /* 数学:官方题解 首先,数组中每个元素至少是1 然后对于任意一个询问Li, Ri, Ansi, 说明Li ~ Ri中的元素必定是Ansi的倍数,那么只需将其与Ansi取最小公倍数即可 ...
- Java之美[从菜鸟到高手演变]之HashMap、HashTable(转载)
http://blog.csdn.net/zhangerqing/article/details/8193118
- [Cocos2d-x For WP8]Menu菜单
菜单栏这是游戏里面基本的控件来的, 头文件: #include <CCMenu.h> 继承关系图: 头文件: #include < ...
- HDU 4057 Rescue the Rabbit(AC自动机+DP)
题目链接 一个数组开小了一点点,一直提示wa,郁闷,这题比上个题简单一点. #include <iostream> #include <cstring> #include &l ...
- C#设计模式——抽象工厂模式(原文转自:http://blog.jobbole.com/78059/)
一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创 ...
- CCAction
之前介绍CCNode的时候说过,动作是指在特定时间内完成移动.缩放.旋转等操作的行为,节点可以通过运行动作来实现动画效果,这里的动作就是指CCAction对象,它有很多的子类,每个子类都封装了不同的动 ...
- QLineEdit 使用方法
在Qt中,QLineEdit是文本编辑框控件,是比较基础且常用的控件的之一,下面是其的一些基本操作. 比如: 禁用或启用该控件 // lineedit is the object name of QL ...
- ThinkPHP框架的部署
1.将ThinkPHP框架的框架文件放到想要放置的地方,与创建的应用文件夹同级 2.vhost文件中设置虚拟目录 3.在hosts文件中配置 4.在应用目录中创建入口文件index.php 5.在入口 ...
- 几个与时间相关的php的函数
这些函数很常用,但是不用的话,像我这样的初学者放下就记不清了,这时最好的办法就是去查文档,写一下印象会更深一些 1.时间戳函数strtotime():一个就是string to time(我自己这样理 ...
- php 去除html标记--strip_tags与htmlspecialchars的区别详解
php 去除html标记--strip_tags与htmlspecialchars的区别详解 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-26 本篇文章是对php中去除html ...