c# - 了解 DependencyProperty 的工作原理和实现方式

标签 c# wpf windows silverlight-4.0

Silverlight/WPF DependencyProperty 启用数据绑定(bind)并指示属性值何时更改,而无需实现 INotifyPropertyChanged。我的问题是这在低级别是如何工作的——DependencyProperty 或 DependencyObject 是如何工作的?当 DependencyObject、DependencyProperty 和 DispatcherObject 均未定义任何事件时执行此更改通知。这是否与 DispatcherObject.Dispatcher 有关?属性(property)?

Dependency properties, or the DependencyObject class, do not natively support INotifyPropertyChanged for purposes of producing notifications of changes in DependencyObject source property value for data binding operations.

这一出色的说明逐字逐句地摘自:

http://msdn.microsoft.com/en-us/library/ms752914.aspx

http://msdn.microsoft.com/en-us/library/ms753358.aspx

最佳答案

依赖属性在内部与绑定(bind)系统紧密集成。因此,设置依赖属性的代码可以直接调用绑定(bind)系统并告诉它进行更新,而不是“通知属性已更改”。

类似地,继承/附加属性之类的东西可以在任何后代元素上更新和/或布局/测量/排列可以更新。它甚至可以告诉任何触发器(在 Styles 或 ControlTemplates 中)被重新评估。

Dispatcher 并不是真正相关的,但可能会在此过程中使用。

简而言之,它已融入 WPF/Silverlight。

关于c# - 了解 DependencyProperty 的工作原理和实现方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7079780/

相关文章:

c# - 从数据库中计算正确答案的数量

c# - 相同的系统,相同的代码,不同的行为 : The request was aborted: Could not create SSL/TLS secure channel

c++ - 在 UTF-8 内部工作然后仅在 Windows 需要时才转换为 UTF-16 是否有任何危险?

c# - 加载到 richtextbox wpf c# 后,rtf 布局发生了变化

c# - 如何读取 Xamarin Forms PCL 项目中的文本文件?

c# - 是否可以在 WPF 中使用反射绑定(bind)到属性?

c# - MouseDoubleClick 事件不会冒泡

c# - 对话框在 wpf 弹出窗口后面打开

windows - XCOPY 是通过 Windows 文件系统复制文件夹/文件的最快工具吗?

c# - VS2015 - Xamarin - 安装 : Xamarin. Android.Support.v4 时出错