代码改变世界

随笔档案-2011年8月28日

WPF依赖属性,绑定通知机制系列补充说明

2011-08-28 09:31 by java线程例子, 362 阅读, 收藏,
摘要: 依赖对象准备增加了属性元数据类型的定义,开始忘记贴了。以上代码都经过了测试,模拟是成功的。其实微软在页面中的绑定语法最终都会如模拟中那样实现。微软的做法是导入xaml文件的时候根据文件中的控件语法动态的生成控件实例,其绑定语法也是在这个过程中自动添加进出的,只不过需要一个简单的路径语法分析而已。另外,Silverlight里的每个控件都有一个DataContext属性,这个属性发生变化时,我觉得会整理一次当前控件和其子控件的绑定关系,也就是再做一次绑定梳理。当然,这只是我的猜测,谁有闲心的话可以去反编译一下代码,看看具体的实现。希望这篇文章能帮助大家理解WPF的依赖属性,绑定和通知机制的了解。 阅读全文

模拟实现WPF的依赖属性及绑定通知机制(4)--模拟实现绑定连动机制

2011-08-28 09:20 by java线程例子, 227 阅读, 收藏,
摘要: 1、一个依赖对象示例:public class MyDendencyControl : MyDependencyObject { public static readonly MyDependencyProperty ContentDependencyProperty = MyDependencyProperty.Register("Content", typeof(string), typeof(MyDendencyControl), new MyPropertyMetadata("hello"));//封装成普通属性的依赖属性,注意调用的是基类的相关 阅读全文

模拟实现WPF的依赖属性及绑定通知机制(3)--依赖对象

2011-08-28 09:07 by java线程例子, 238 阅读, 收藏,
摘要: 下面是依赖对像类的实现:(注,这里涉及到INotifyPropertyChanged接口,大家可以参考MSDN文档了解)./// <summary> /// 依赖对像,主要提供属性值和属性绑定的管理。 /// </summary> public class MyDependencyObject { private IDictionary<MyDependencyProperty, object> _dict = new Dictionary<MyDependencyProperty, object>(); private IDictionary& 阅读全文

模拟实现WPF的依赖属性及绑定通知机制(2)--依赖对象的准备

2011-08-28 09:04 by java线程例子, 153 阅读, 收藏,
摘要: 依赖对象一个主要的功能就是提供对依赖属性属性值的管理,所有需要具有依赖属性的类都可以从这里继承,而无需自己去管理依赖属性值。依赖对象的主要方法就是SetValue和GetValue两个方法,这也是依赖属性和普通属性获取值不一样的地方,当然实际的应用中依赖属性一般不会直接使用这两个方法,而是封装成普通属性方式。另外对于依赖属性,我们还提供了一个属性值发生变化时依赖对象可以截获的回调机制,这样做的目的是增加对依赖属性的控制,但需要注意的是这个控制是针对类的,而不是实例,因此处理的时候需要注意到这个特性。1)为了提供这个特性我们需要定义一个用于回调的委托:public delegate void M 阅读全文

模拟实现WPF的依赖属性及绑定通知机制(1)--依赖属性

2011-08-28 08:47 by java线程例子, 255 阅读, 收藏,
摘要: 依赖属性的好处大家可以参见前面我转载的博文。我们知道,WPF中控件的属性非常多,但这些属性中大部分你在编程过程中是不会改变设置的,而是直接利用其默认值(所以以后设计属性时,默认值的选择也非常关键,这有利于减少存储),如果采用原来的属性方式,每个类的实例都会有自己的一份属性值集合,哪怕都是缺省值。这样做从存储上来讲当然是不划算的,因此可以将缺省值存在类里面,而只有改变了的与默认值不同的值才存在实例里面,然后按照一定的逻辑顺序来访问属性值即可,这就是依赖属性的基本思想。下面我们开始模拟这套机制来实现我们自己的依赖属性:1)依赖属性 其实依赖属性类就是一个包含属性相关设置的类,本身没有什么特别之处, 阅读全文