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

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

好我们开始

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

普通属性定义

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. 简单几何(向量旋转+凸包+多边形面积) UVA 10652 Board Wrapping

    题目传送门 题意:告诉若干个矩形的信息,问他们在凸多边形中所占的面积比例 分析:训练指南P272,矩形面积长*宽,只要计算出所有的点,用凸包后再求多边形面积.已知矩形的中心,向量在原点参考点再旋转,角 ...

  2. BZOJ3658 : Jabberwocky

    考虑将某线段下方的点取走: 将所有点从低到高排序 每扫描到一条水平线,对于上面每个点,找到它下面同色的前驱后继,统计中间点的个数 然后再把线上所有点插入数据结构中 最后再统计相邻的同色的点之间的点个数 ...

  3. 前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  4. 提升 web 应用程序的性能(一)

       提升 web 应用程序的性能,找出瓶颈,加快客户端内容的速度.    作为 web 用户,我们知道页面加载或刷新的速度对其成功至关重要.本文将帮助您更好地理解影响 web 应用程序性能的因素.学 ...

  5. VTKMY 3.3 VS 2010 Configuration 配置

    Download VTKMY 3.3 Download VS2010 Download CMake 3.2.0 I assume you've already installed VS2010 and ...

  6. 常用的一些webshell木马官方后门

    80SEC剑心修改过世界杀毒版 http://wwwxx.cn/1.asp?web2a2dmin=//?web2a2dmin=//1.asp  绕过 不灭之魂的后门 1.在错误页面右键可以查看密码 2 ...

  7. 为什么我不再用 .NET 框架(转)

    NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简单来说,它限制了我们选择的能力(对我来说很重要),转移了我们的注意力,使得我们向内认知它的安全性,替代了帮助我们认知外面广阔世界的 ...

  8. MS14-082引起的问题

    经常看报道说打了微软的某某补丁出了什么什么问题,但是本人从未亲身经历过,直到MS14-082这个Office补丁的出现,让我也切身体会了一番,有点中奖的感觉. 具体参见: https://suppor ...

  9. Beetl2.2使用说明书20151201

    李家智<xiandafu@126.com> Table of Contents 1. 什么是Beetl 2. 基本用法 2.1. 从GroupTemplate开始 2.2. 模板基础配置 ...

  10. Java常用类之Properties类

    1.特性 Properties类表示了一个持久的属性集,可保存在流中或从流中加载,实现内存和文件的交互.Properties继承了Hashtable<Object,Object>类,可以使 ...