写这篇心得之前,看到博友一句话:需求是推动发展的原动力。

说得好,说的棒,说到了点子上,说到了心里去;

好我们开始

最初的世界是简单的,甚至比单细胞动物还简单:

普通属性定义

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深入浅出的更多相关文章

  1. [深入浅出Windows 10]模拟实现微信的彩蛋动画

    9.7 模拟实现微信的彩蛋动画 大家在玩微信的时候有没有发现节日的时候发一些节日问候语句如“情人节快乐”,这时候会出现很多爱心形状从屏幕上面飘落下来,我们这小节就是要模拟实现这样的一种动画效果.可能微 ...

  2. [深入浅出Windows 10]实现饼图控件

    13.2 实现饼图控件 上一小节讲解了动态生成折线图和区域图,对于简单的图形这样通过C#代码来生成的方式是很方便的,但是当我们的图表要实现更加复杂的逻辑的时候,这种动态生成的方式就显得力不从心了,那就 ...

  3. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  4. 【深入浅出jQuery】源码浅析2--奇技淫巧

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  5. 深入浅出Struts2+Spring+Hibernate框架

    一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...

  6. DOM 事件深入浅出(二)

    在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...

  7. DOM 事件深入浅出(一)

    在项目开发时,我们时常需要考虑用户在使用产品时产生的各种各样的交互事件,比如鼠标点击事件.敲击键盘事件等.这样的事件行为都是前端DOM事件的组成部分,不同的DOM事件会有不同的触发条件和触发效果.本文 ...

  8. 深入浅出node(2) 模块机制

    这部分主要总结深入浅出Node.js的第二章 一)CommonJs 1.1CommonJs模块定义 二)Node的模块实现 2.1模块分类 2.2 路径分析和文件定位 2.2.1 路径分析 2.2.2 ...

  9. IOS 网络-深入浅出(一 )-> 三方SDWebImage

    首要我们以最为常用的UIImageView为例介绍实现原理: 1)UIImageView+WebCache:  setImageWithURL:placeholderImage:options: 先显 ...

随机推荐

  1. 模拟 ZOJ 3736 Pocket Cube

    题目传送门 题意:魔方最多旋转n次,问最多能使多少面颜色相同 分析:6种状态(3种旋转方式*顺逆方向,其他对称的!),首先先打个表,然后很愉快的DFS.自己写的时候费劲脑汁,代码很长,还TLE了... ...

  2. SQL SERVER事务处理

    SQL SERVER事务处理   一.事务定义: 事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分. 如果事务遇到错误且必须取消或回滚,则所有 ...

  3. JS倒计时代码

    第一种:精确到秒的javascript倒计时代码 HTML代码: <form name="form1"> <div align="center" ...

  4. https资料

    1.HTTPS的七个误解   http://blog.httpwatch.com/2011/01/28/top-7-myths-about-https/ 中文 http://www.cnblogs.c ...

  5. memcached与spring

    key的生成规则 update 与 query 的参数不一样,如何让其生成一样的key 列表缓存如何定义key及失效 最近同事推荐了一个开源项目:Simple-Spring-Memcached(简称s ...

  6. NBUT 1457 Sona(莫队算法+离散化)

    [1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...

  7. CSS系列:less备忘

    less备忘 //这是一个运行在koala中的less文件,//注释不会被编译到css文件中,/**/注释会 ****************by 李可 2016/04/19 /*所有,所有伪类*/ ...

  8. css里设置一个div在顶部固定,不随滚动条滚动而滚动

    <div style="border:1px solid red;position:fixed;top:0px;float:inherit;width:100%">删除 ...

  9. react 用value 直接赋值 必须用onchange的解决方式

    render : function(){ return <input value={this.state.bankCardValue} type="text" onKeyUp ...

  10. PISCES P4-vSwitch 安装以及一次失败的测试

    本文参考 (1)Varant Download:点我 (2)Mac上安装Git:戳我 (3)Github P4-vSwitch/Varant:点我 (4)Mac强制重新启动:戳我 实验环境: Mac ...