一、概述
①簡單地說,數(shù)據(jù)綁定就是將源對象的屬性綁定到目標(biāo)對象的屬性。
②源對象可以是任何內(nèi)容,如WPF元素、ADO.NET對象或自行創(chuàng)建的純數(shù)據(jù)對象。
③數(shù)據(jù)綁定的最簡單情形是元素綁定,即源對象是WPF元素而且源屬性是依賴項屬性。因為依賴項屬性具有內(nèi)置的更改通知支持。因此,當(dāng)在源對象中改變依賴項屬性的值時,會立即更新目標(biāo)對象中的綁定屬性。
二、綁定表達(dá)式
<TextBlock Margin="10" Name="lblSampleText" FontSize="{Binding ElementName=sliderFontSize, Path=Value}" Text="Simple Text"></TextBlock>①綁定表達(dá)式使用XAML標(biāo)記擴(kuò)展(因此具有花括號)。②綁定表達(dá)式以單詞Binding開頭。元素到元素的綁定需配置兩個屬性:ElementName屬性(指示源元素)和Path屬性(指示源元素中的屬性)。三、綁定錯誤
當(dāng)指定的元素或?qū)傩圆淮嬖跁r,WPF不會報錯,只是不能在目標(biāo)屬性中顯示數(shù)據(jù)。
四、綁定模式
綁定模式有五種,如下圖。在應(yīng)用時推薦明確設(shè)置綁定模式。
五、使用代碼創(chuàng)建綁定
①在XAML標(biāo)記中使用Binding標(biāo)記擴(kuò)展來聲明綁定表達(dá)式通常最高效。然而也可以用代碼創(chuàng)建綁定。
Binding binding = new Binding();binding.Source = sliderFontSize;binding.Path = new PRopertyPath("Value");binding.Mode = BindingMode.TwoWay;lblSampleText.SetBinding(TextBlock.FontSizeProperty, binding);②可以通過BindingOperation類的兩個靜態(tài)方法移除綁定。ClearBinding()方法移除具體元素的具體依賴項屬性的綁定
BindingOperations.ClearBinding(lblSampleText, TextBlock.FontSizeProperty);ClearAllBindings()方法移除具體元素的所有綁定BindingOperations.ClearAllBindings(lblSampleText);③不管是通過代碼創(chuàng)建的綁定,還是通過XAML標(biāo)記創(chuàng)建的綁定,都可以使用上面兩個方法刪除綁定。④通過代碼創(chuàng)建綁定主要有以下應(yīng)用場景:A:創(chuàng)建動態(tài)綁定
B:刪除綁定
C:創(chuàng)建自定義控件(為了讓他人更容易地修改自定義控件的外觀,需要將特定細(xì)節(jié)(如事件處理程序和數(shù)據(jù)綁定表達(dá)式)從標(biāo)記移到代碼中。
六、使用代碼檢索綁定
可使用代碼檢索綁定并檢查其屬性,而不必考慮綁定最初是用代碼還是標(biāo)記創(chuàng)建的。有兩種方式:
①通過BindingOperations.GetBinding()來檢索對應(yīng)的Binding對象。
假如有如下綁定:
<TextBlock Margin="10" Name="lblSampleText" FontSize="{Binding ElementName=sliderFontSize, Path=Value, Mode=TwoWay}" Text="Simple Text"></TextBlock>可使用以下代碼獲取綁定:Binding binding = BindingOperations.GetBinding(txtBound, TextBox.TextProperty);通過綁定對象就可以查看其屬性:binding.ElementName:綁定源對象的名稱
binding.Path:從綁定源對象提取的對應(yīng)屬性的值
binding.Path.Path:獲取綁定源對象的綁定屬性名稱
binding.Mode:用于告知綁定何時更新目標(biāo)元素②通過BindingOperations.GetBindingExpression()方法獲取更實用的BindingExpression對象
BindingExpression expression = BindingOperations.GetBindingExpression(txtBound, TextBox.TextProperty);通過BindingExpression對象可以查看如下屬性:expression.ResolvedSource:獲取綁定對象的引用
expression.ResolvedSourcePropertyName:獲取綁定源對象的綁定屬性名稱七、綁定更新和綁定延遲
①建立綁定后源對象屬性的變化會立即影響目標(biāo)屬性,然而,反方向的變化,即從目標(biāo)到源不會立即發(fā)生。它受綁定的UpdateSourceTrigger屬性控制。
②上圖中列出的值不影響源到目標(biāo)的更新,他僅能控制TwoWay或OneWayToSource模式中目標(biāo)到源的更新。
③通過設(shè)置綁定的Delay屬性可以延遲更新
<TextBox Name="txtBound" Text="{Binding ElementName=lblSampleText, Path=FontSize, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Delay=500} " Width="100"></TextBox>八、綁定到非元素對象①綁定到非元素對象時,只需要將綁定中的ElementName屬性換成以下三個屬性中的一個即可:Source:指向數(shù)據(jù)對象
RelativeSource:可根據(jù)相對于目標(biāo)對象的關(guān)系指向源對象(通過該屬性可將元素綁定到自身或其父元素)。多用于編寫控件模版或數(shù)據(jù)模版。
DataContext:如果綁定中沒有使用Source或RelativeSource屬性指定源,WPF就從當(dāng)前元素開始在元素樹中國向上查找。檢查每個元素的DataContext屬性,并使用第一個非空的DataContext屬性。一般用于將大量元素綁定到同一個對象。
DataContext實例代碼:
<StackPanel Margin="10" DataContext="{x:Static SystemFonts.IconFontFamily}"> <TextBlock Margin="5" Text="{Binding Path=Source}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily}, Path=LineSpacing}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily}, Path=FamilyTypefaces[0].Style}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily}, Path=FamilyTypefaces[0].Weight}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={StaticResource CustomFont}, Path=Source}"></TextBlock></StackPanel>
新聞熱點
疑難解答