什么是 PropertyDescriptor,它有什么用?
PropertyDescriptor 是一个抽象类,提供了一些方法和属性,这些方法和属性主要用于内部的 Binding 类。例如,WPF 具有那些“正常”属性和依赖属性,Binding 也使用 PropertyDescriptor 作为普通属性,并使用继承自 PropertyDescriptor 并覆盖其抽象方法(如SetValue、GetValue、ResetValue..etc )的 DependencyPropertyDescriptor 。此外,如果实际属性的所有者类实现了 INotifyPropertyChanged,那么这些 PropertyDescriptor 提供了一种机制来侦听 PropertyChanged 事件。总而言之,当我们谈论 WPF 中的绑定时,一侧是 PropertyDescriptor,另一侧是模型类提供所需的属性。
我什么时候想实现自己的描述符?
我现在能想到的唯一示例是,当您出于某种原因无法在实体类中实现 INotifyPropertyChanged 并且您必须进行某种轮询来询问或更改属性时,您将编写自己的 PropertyDescriptor 进行某种轮询属性要求其每 1/100 秒的值。如果您告诉 Binding 使用您的自定义 PropertyDescriptor,您最终将拥有一个“PollingBinding”类。
另一个例子是“DelayBinding”,有些人在互联网上写了一个自定义的 PropertyDescriptor 与 Binding 相结合,它计算您希望在属性上设置值的频率以及您是否尝试在 1/100 中设置值 1000 次再过一秒钟,那件事将允许您每 10 次这样做,因此它会给您带来一点延迟。
您发布给我们的链接中的示例是另一个很好的示例。在那个问题中,这个家伙希望拥有自己的自定义类型描述符来管理自己的自定义更改通知。这就是 PropertyDescriptor 派上用场的地方。
PropertyDescriptor 通常与 Binding 一起使用。仅此一点就很垃圾。:)