[英]How does a Binding actually work?
我已經學習WPF幾個月了,我很好奇一件事。 綁定如何實際工作? 我的意思是,在幕后發生了什么。 我不希望這里的任何人會給出詳細的解釋,但可能是一個很好的資源或鏈接在哪里閱讀這樣的東西。 我一直在搜索和谷歌搜索,但到目前為止沒有好的點擊。
我意識到要完全理解這一點,你可能必須要理解框架的大部分內容,但是一點基本的理解會很棒。
謝謝
在綁定中需要考慮兩個方面,將值放入UI並讓UI通知其DataContext中的更改。
基本上你幾乎可以將任何東西綁定到任何POCO對象,該對象不需要實現任何特殊的東西。 使用普通對象的限制是在基礎值更改時不會告知綁定目標。
房地產變化通過以下三種機制之一傳播:
依賴屬性:當其值發生變化時將通知綁定系統,也可用於動畫。
INotifyPropertyChanged:如果綁定是實現INotifyPropertyChanged的對象的屬性,綁定系統將查找訂閱PropertyChanged事件並更新綁定目標,當引發此事件時,屬性名稱將作為字符串發送。
* 屬性 *更改事件:綁定將查找的最后一件事是一個名稱與源屬性相同且在末尾更改的事件,因此Name屬性需要有一個名為NameChanged的公共事件,這允許WPF綁定到較舊的.net類,如1.1。
我對WPF中綁定的細節知之甚少,但如果它與System.ComponentModel
和Windows Forms中綁定背后的原理相同,那么我最近寫的一篇博客文章可能有助於為您闡明:
基本上,綁定源必須實現IList
, IListSource
, ITypedList
或IBindingList
。 通過反射或顯式定義,數據源公開描述其可綁定屬性的PropertyDescriptor
對象。 這些屬性的名稱(可能是也可能不是數據源中包含的對象上的實際屬性的名稱 - 例如,在DataTable
,它們是列名稱)與DisplayMember
/ ValueMember
屬性匹配,或者在WPF,綁定路徑。
這是一個非常難以回答的問題。 我相信答案大致有兩個方面。 第一個是文檔。 如果你BindingOperations
了綁定表達式的所有文檔,包括如何構建路徑,以及像BindingOperations
這樣的輔助類,你可以找到很多東西。 如果這還不夠,您可以通過從Microsoft Source Initiative站點下載代碼來深入了解代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.