PropertyDescriptor和WPF Binding mechinsm

背景

我正在研究一些代码并遇到一个包含带有一些绑定列的DataGrid的xaml:

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

我到处搜索,但没有包含名为calc_from的属性的类。 然后我偶然发现了一些PropertyDescriptor类。 我认为这是他们如何使绑定工作,但没有完全理解如何。

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

我已经在这个post中找到了一个例子,但如果有人能够对它有所了解,我会很高兴

什么是PropertyDescriptor,它有什么用?

PropertyDescriptor是一个抽象类,提供了很少的方法和属性,这些方法和属性主要在内部的Binding类中使用。 例如,WPF具有那些“普通”属性和依赖属性,Binding使用PropertyDescriptor作为普通属性,DependencyPropertyDescriptorinheritance自PropertyDescriptor并覆盖其抽象方法,如SetValue,GetValue,ResetValue..etc 。 此外,如果实际属性的所有者类实现了INotifyPropertyChanged,那么PropertyDescriptors提供了一种监听PropertyChanged事件的机制。 总结一下,当我们谈论WPF中的Bindings时,一方面有一个PropertyDescriptor对着模型类,在另一方面提供了所需的属性。

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

我现在能想到的唯一例子就是当你因为某种原因无法在你的实体类中实现INotifyPropertyChanged而你必须进行某种轮询来询问或更改属性然后你会编写自己的PropertyDescriptor来进行一种轮询。财产要求每1/100一次的价值。 如果您告诉Binding使用您的自定义PropertyDescritor,您将最终拥有一个“PollingBinding”类。

另一个例子是“DelayBinding”,有些人在互联网上写了一个定制的PropertyDescriptor和Binding,它计算你想要在一个属性上设置一个值的频率,如果你试图在1/100的设置中设置1000倍的值一秒钟然后那个东西会允许你每隔10次这样做,所以它会给你一个小的延迟。

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

PropertyDescriptor通常使用Binding。 仅此一件事就是非常倾销。 🙂