关于dependency property(1)
用WPF写代码有一年了,对这个也稍微有些感觉。总觉得有些心得需要记下,所以开了这个博客园,一是方便自己以后查阅,二是和大家一起分享。
关于WPF,大家一定都不陌生,就从它最core的技术开始吧。dependency property:
关于dependency property的具体介绍就去看msdn吧,我就不具体介绍了,http://msdn.microsoft.com/en-us/library/ms752914.aspx
我想说的是我对它的一些了解。一说它,就和所有的WPF核心技术挂钩,所以不能不说它是很重要的,所以完全搞懂它是相当的重要!
1.从名字说起。翻译过来大概就是依赖的属性。相信对C#有基础的朋友对property都很熟吧。WPF的dependency property具有依赖性,这也是它与不同属性不同之处,这与它的创建有很大的关系。
2.定义dependency property.
(1)声明一个static的 DependencyProperty的实例(实际上是留在本地的存储值(localValue),这也是为什么叫它这个名字的原因所在吧)
(2)在static structure里对DependencyProperty的实例进行register.例如
MarginProperty=DependencyProperty.Register("Margin",typeof(Thickness),typeof(FrameworkElement),new FrameworkPropertyMetadata("......"),new ValidateValueCallback(..));
第一项是注册名,二三是分别属于什么类型,哪个类,重点是第四项和第五项。
我最想重点说的就是coerceValueCallback,propertyChangedCallback,和validateValueCallback.
coerceValueCallback,propertyChangedCallback 属于metadata里定义的eventhandler. 它们被fire的顺序是coerceValueCallback-->validateValueCallback-->propertyChangedCallback
coerceValueCallback这里可以用来根据条件来修改当前赋予的值,注意这里只是修改一个对外输出值,并不会改变前面所说的localvalue,当条件变化的时候,还是会变的,这也就是为什么叫做dependency property的原因吧。propertyChangedCallback用
来处理值变化时的情况。validateValueCallback用来验证是否可以赋予当前的值。
(3)创建一个property wrapper.用setvalue and getvalue来做。注意,千万不要再set里做值的处理或是其他问题的考虑,因为很有可能只运行setvalue(XX,value)这一句,或是别处直接调用者一句。所以要处理数据或是根据数据处理其他情况,还是在
metadata里比较稳妥。
今天先暂时写到这里吧。改天继续更深入的探究!
posted on 2010-05-19 22:57 Fly In WPF 阅读(516) 评论(0) 收藏 举报
浙公网安备 33010602011771号