c# - PropertyDescriptor 和 WPF 绑定(bind)机制

标签 c# wpf xaml

背景

我正在调查一些代码并遇到一个包含 DataGrid 和一些绑定(bind)列的 xaml:

Binding="{Binding calc_from}" ....

我到处搜索,但没有包含名为 calc_from 的属性的类。 然后我偶然发现了一些 PropertyDescriptor 类。我认为这就是他们使绑定(bind)起作用的方式,但并不完全理解是如何实现的。

问题

什么是 PropertyDescriptor,它有什么用处? 我什么时候想要实现自己的 CustomTypeDescriptor? 它与 WPF 绑定(bind)机制有什么关系?

我在 this 中遇到了一个例子线程,但如果有人能对此有所了解,我会很高兴

最佳答案

什么是 PropertyDescriptor,它有什么用处?

PropertyDescriptor 是一个抽象类,提供了一些主要用于 Binding 类内部的方法和属性。例如,WPF 具有那些“普通”属性和依赖属性,因此 Binding 对普通属性使用 PropertyDescriptor 和 DependencyPropertyDescriptor,它继承自 PropertyDescriptor 并覆盖其抽象方法,例如 SetValue、GetValue、ResetValue..etc。此外,如果实际属性的所有者类已实现 INotifyPropertyChanged,则这些 PropertyDescriptors 提供了一种监听 PropertyChanged 事件的机制。总而言之,当我们谈论 WPF 中的绑定(bind)时,一侧是 PropertyDescriptor,而另一侧是提供所需属性的模型类。

我什么时候想要实现自己的描述符?

我现在能想到的唯一例子是,当你出于任何原因无法在你的实体类中实现 INotifyPropertyChanged 并且你必须进行某种轮询来询问或更改属性时,你将编写自己的 PropertyDescriptor 来做一些事情轮询一个属性,每 1/100 询问一次它的值,持续一秒钟。如果您告诉 Binding 使用您的自定义 PropertyDescritor,您最终将拥有一个“PollingBinding”类。

另一个例子是一些人在互联网上写的“DelayBinding”,它有一个自定义的 PropertyDescriptor 结合 Binding,它计算你希望在属性上设置一个值的频率,如果你试图在 1 中设置 1000 次该值/100 秒然后那个东西将允许你这样做,尽管每 10 次,所以它会给你一个小的延迟。

您发布给我们的链接中的示例是另一个很好的示例。在那个问题中,这个人希望有自己的自定义类型描述符来管理自己的自定义更改通知。这就是 PropertyDescriptor 派上用场的地方。

PropertyDescriptor 通常与绑定(bind)一起使用。光是那件事就很垃圾。 :)

关于c# - PropertyDescriptor 和 WPF 绑定(bind)机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19784028/

相关文章:

wpf - MVVM:设计具有聚合/依赖 ViewModel 的 ViewModel 架构

c# - 改变多边形的点

java - 使用Java,如何获取TextBlock文本的 'ActualWidth'并使用它?

c# - 从确认框获取值

c# - Unity 中的全局变量(在所有场景中更改字体大小、颜色)

c# - .net core 3.1 中的 ExpressionMetadataProvider

wpf - 扩展器折叠动画不起作用

WPF 按钮图标被镜像,为什么?

silverlight - 如何以编程方式在滚动查看器中添加网格

c# - 如何在图片框控件中突出显示图像的特定部分