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: 先显 ...
随机推荐
- DOM对象和JQuery对象
1.JS对象转化为Jquery对象 Var p=document.getElementById(“p”); Var $obj=$(p); 2.Jquery对象转换为JS对象 Var $bh=$(“#i ...
- 拓扑排序 Codeforces Round #290 (Div. 2) C. Fox And Names
题目传送门 /* 给出n个字符串,求是否有一个“字典序”使得n个字符串是从小到大排序 拓扑排序 详细解释:http://www.2cto.com/kf/201502/374966.html */ #i ...
- ZOJ 3903 Ant ZOJ Monthly, October 2015 - A
Ant Time Limit: 1 Second Memory Limit: 32768 KB There is an ant named Alice. Alice likes going ...
- Piggy-Bank[HDU1114]
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- 【BZOJ】1877: [SDOI2009]晨跑(最小费用最大流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1877 费用流做多了,此题就是一眼题. 拆点表示只能经过一次,容量为1,费用为0. 然后再连边即可,跑 ...
- 【BZOJ】1270: [BeijingWc2008]雷涛的小猫(DP+水题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1270 这完全是一眼题啊,但是n^2的时间挺感人.(n^2一下的级别请大神们赐教,我还没学多少dp优化 ...
- 【BZOJ】1008: [HNOI2008]越狱(快速幂)
http://www.lydsy.com/JudgeOnline/problem.php?id=1008 刚开始看不会做啊,以为是dp,但是数据太大!!!所以一定有log的算法或者O1的算法,,,,还 ...
- Graph database_neo4j 底层存储结构分析(8)
3.8 示例1:neo4j_exam 下面看一个简单的例子,然后看一下几个主要的存储文件,有助于理解<3–neo4j存储结构>描述的neo4j 的存储格式. 3.8.1 neo4j ...
- 利用java实现的一个发送手机短信的小例子
今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webservi ...
- Xcode4 使用技巧
Xcode4 使用技巧 使用 xcode4 也有一段时间了,今天整理了一下 xcode4 的一些使用技巧,在这里分享给大家. 设置作者 这里所指的作者就是每个源文件头部注释中的 "Creat ...