概念
從源對象提取一些資訊,并用這些資訊設定目标對象的屬性
示例
在給TextBlock控件的FontSize屬性指派時,我們使用了綁定表達式
資料綁定表達式使用XAML的标記擴充(是以具有花括号)(參見:)
這裡建立了一個System.Windows.Data.Binding對象,是以綁定表達式以單詞binding開頭
在本例中隻設定了Binding對象的兩個屬性ElementName和Path屬性
ElementName
指定源元素
Path
指定源元素中的屬性
Mode
OneWay:
當源屬性變化時,更新目标屬性
TwoWay:
當源屬性變化時,更新目标屬性,并且,當目标屬性變化時,更新源屬性
OneTime:
最初根據源屬性值設定目标屬性,其後的所有改變都會被忽略
OneWayToSource:
當目标屬性變化時,更新源屬性,源屬性變化時,目标屬性不變
Default:
根據目标屬性的設定而定
UpdateSourceTrigger
如果我們把一個屬性的值綁定到一個文本框的Text上,那麼隻有當這個文本框失去焦點時才會更新目标屬性的值;如果你想實時更新目标屬性的值該如何處理呢?那麼這時就要設定UpdateSourceTrigger屬性了,這個屬性有一下幾種可能的情況
PropertyChange:
當目标屬性發聲變化時立即更新
LostFocus:
當目标屬性發生變化,并且目标失去焦點時更新
Explicit:
除非調用BindingExpression.UpdateSource()方法,否則無法更新源
Default:
根據目标屬性的設定來确定更新行為,大多數元素都是PropertyChange設定,但TextBox.Text屬性是LostFocus設定
Delay
有的時候需要延遲一段時間再更新目标屬性的值,此時需要設定Delay屬性,機關是毫秒
Source
綁定到非元素對象;與ElementName互斥
該屬性指向源對象的引用(就是提供資料的對象)
以下代碼可以綁定到已經存在的對象
以下代碼可以綁定到已經存在的資源
RelativeSource
Self:
表達式綁定到同一進制素的另一屬性上
FindAncestor:
表達式綁定到父元素
PreviousData:
綁定到資料清單中的前一個資料項,應用在資料清單元素中
TemplateParent:
綁定到應用模版的元素,在模版内這種設定才生效
說明
除了綁定到元素的屬性,還可以綁定到元素的屬性的屬性或者存在索引器的屬性
比如:
MyElement.Property.OtherProperty
MyElement.Property[2]
當綁定到格式不正确的元素屬性上時,WPF并不會是以而編譯不通過
雙向綁定比單向綁定開銷更大,OneTime綁定比雙向綁定和單向綁定的開銷都小
盡量使用明确的綁定模式,而不要使用Default綁定模式
源屬性改變,通知到目标屬性後,目标屬性還可以作為源屬性,通知下一個目标屬性,這就是多綁定
使用代碼建立綁定
在上面的示例中完全可以使用C#代碼建立綁定
代碼如下
使用代碼删除綁定
如果像通過代碼删除某一個元素的綁定,可以通過下面兩種方式完成
使用代碼檢索綁定
可以使用如下方式擷取一個元素的綁定對象
使用DataContext綁定
可以先對父元素設定DataContext屬性,然後在子元素中就可以輕松的使用父元素設定的DataContext所指向的對象了
修改記錄
2015-1-5:完成一部分内容
參考資料
《Pro WPF 4.5 in C# 4th Edition》