WPF基础学习笔记(一)Dependency Object 和 Dependency Property

。依赖属性是WPF个人觉得对精彩和最有特色的部分。所以特地先拿出来。

首先要实现Dependency Property 则必须要继承Dependency Object。如果看下WPF的基础控件其实都间接或者直接继承Dependency Object,这点规律性我在后面再做规律陈述。

首先Dependency Object 我搬下书的描述

Only the thread that the Dispatcher was created on may access the DispatcherObject directly. To access a DispatcherObject from a thread other than the thread the DispatcherObject was created on, call Invoke or BeginInvoke on the Dispatcher the DispatcherObject is associated with.

这点完全契合WPF的线程模型。首先DO是和线程相关,只有创建线程可以访问DO。这就是为什么在WPF我们自己创建的线程想要改变UI元素,则必须Dispatcher.Invoke和BeginInvoke了。

DP的特色和知识点信息量巨大。作为一个学习笔记,我只列出精华内容。

1 继承性

这点和WPF的视觉树契合

2 内存节约性

通过默认值,可以大大节约值的设置

3 多值存储性(优先级性)

public enum BaseValueSource
{
   Unknown = 0,
   Default = 1,
   Inherited = 2,
   DefaultStyle = 3,
   DefaultStyleTrigger = 4,
   Style = 5,
   TemplateTrigger = 6,
   StyleTrigger = 7,
   ImplicitStyleReference = 8,
   ParentTemplate = 9,
   ParentTemplateTrigger = 10,
   Local = 11,
}
这个优先级可以回答大多数更新值没有起作用的疑问了。

5 PropertyChangedCallback
值变更回调。
这里特别提醒注意的是,是所有DP值赋值都会走set属性这条路,如果是通过Express来Binding或者直接Xmal赋值,WPF会自己去走一条“偷偷摸摸”的捷径,关于这点几乎所有的WPF新手都会中招,祝大家踩吭愉快。

好了,说到最后,个人认为DO,DP体现是WPF专门针对UI来设计的。对于需要自定义用户控件特别需要加深理解。

同时,DP和DO对于Binding也是一衣带水的,简而言之,DP是Binding的“左值” ,而DataContext是Binding的“右值”
世事无绝对,当然DO也能当“右值”使用,但是这个是个人喜好,我一家之言认为DO作为右值有点“太重”。由内而外的理解有助于WPF的学习。


DO和DP的学习资料

一站式WPF--依赖属性(DependencyProperty)一
一站式WPF--依赖属性(DependencyProperty)二

WPF基础到企业应用系列7——深入剖析依赖属性

 

转载于:https://www.cnblogs.com/soapgu/p/4660084.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值