我已经学习了几个月的WPF,我很好奇一件事。绑定如何实际工作?我的意思是,在幕后发生了什么。我不希望这里的任何人会给出详细的解释,但可能是一个很好的资源或链接在哪里阅读这样的东西。我一直在搜索和谷歌搜索,但到目前为止没有好的点击。
我意识到要完全理解这一点,你可能必须要理解框架的大部分内容,但是基本的理解会很棒。
由于
答案 0 :(得分:6)
在绑定中需要考虑两个方面,将值放入UI并让UI通知其DataContext中的更改。
基本上你几乎可以将任何东西绑定到任何POCO对象,该对象不需要实现任何特殊的东西。使用普通对象的限制是当基础值发生变化时,不会告知绑定目标。
通过以下三种机制之一传播财产变化:
依赖属性:当其值发生变化时会通知绑定系统,也可用于动画。
INotifyPropertyChanged:如果绑定是实现INotifyPropertyChanged的对象的属性,绑定系统将查找订阅PropertyChanged事件并更新绑定目标,当引发此事件时,属性名称将作为字符串发送。 / p>
* 属性 *更改的事件:绑定最后要查找的是一个名称与source属性相同且在末尾更改的事件,因此Name属性需要有一个名为NameChanged的公共事件,它允许WPF绑定到较旧的.net类,如1.1。
答案 1 :(得分:3)
我对WPF中绑定的细节知之甚少,但如果它与System.ComponentModel
和Windows Forms中的绑定背后的原理相同,那么我最近写的一篇博客文章可能有助于揭示它为你:
Some Background on Windows Forms Data Binding
基本上,绑定源必须实现IList
,IListSource
,ITypedList
或IBindingList
。通过反射或显式定义,数据源公开描述其可绑定属性的PropertyDescriptor
个对象。这些属性的名称(可能是也可能不是数据源中包含的对象的实际属性的名称 - 例如在DataTable
中,而不是列名称)与DisplayMember
/匹配ValueMember
属性,或者就WPF而言,是绑定路径。
答案 2 :(得分:0)
这是一个非常难以回答的问题。我相信答案大致有两个方面。第一个是文档。如果您浏览了绑定表达式的所有文档,包括如何构建路径,例如像BindingOperations
这样的辅助类,你可以找到很多。如果这还不够,您可以通过从Microsoft Source Initiative网站下载代码来深入了解代码。