UpdateSourceTrigger Property in WPF Binding


介紹

這篇文章我將介紹在WPF和Silverlight中更新綁定源的概念。正如您所知道的,當我們用TwoWay的模式綁定時,任何在目標控件上發生的變化都會影響綁定源的值。

請注意只是在用TwoWay綁定的時候,而不是默認的綁定模式OneWay或者OneTime。

現在,問題是當更新源數據時,由於目標控件的數據發生的變化。實際上有三個方法可以實現。

    • Default: 由不同控件控制. 例如 TextBox, 當 LostFocus 事件觸發時,目標綁定發生變化.
    • PropertyChanged: 意味着當目標控件值發生變化時,源數據立馬更新.例如, TextBox是目標綁定,當輸入字符時, 源數據也發生變化. 着就意味着當你輸入字符創的時候,TextBox的數據Text也在改變.
    • Explicit: 當UpdateSourceTrigger 設置為 Explicit, 數據源不會自動更新,只有在后代碼里面顯示的觸發。 

 

針對這些方法我寫啦一些代碼幫助你們更好的理解他們.我們首先從 default 開始. 看下面的代碼塊:

 1 <Border BorderThickness="2" Margin="0 20 0 0" BorderBrush="Brown" CornerRadius="5">
 2     <StackPanel>
 3         <TextBox x:Name="textInput2" Margin="5" />
 4         <TextBox x:Name="txtOutput2" Margin="5"
 5                          Text="{Binding Text,
 6                                 ElementName=textInput2,
 7                                 UpdateSourceTrigger=Default,
 8                                 Mode=TwoWay}"/>
 9     </StackPanel>
10 </Border>

 

這里有一個Border元素里面有一個StackPanel里面包含兩個TextBox.第二個TextBox的Text屬性綁定啦第一個TextBox的屬性Text.在所有的例子里面實際上還有一些代碼. 這個綁定的Mode 設置為 TwoWay 因為我們想更新源數據無論目標發生變化的時候. 最后, 綁定的屬性UpdateSourceTrigger被設置為 Default. 這就意味着當第二個TextBox的綁定目標丟失焦點或者觸發LostFocus 事件時,第一個TextBox的屬性Text綁定的源數據會被更新。

第二個例子是設置 UpdateSourceTrigger 為PropertyChanged.

 1 <Border BorderThickness="2" BorderBrush="Brown" CornerRadius="5">
 2     <StackPanel>
 3         <TextBox x:Name="textInput1" Margin="5" />
 4         <TextBox x:Name="txtOutput1" Margin="5" 
 5                          Text="{Binding Text,
 6                                 ElementName=textInput1,
 7                                 UpdateSourceTrigger=PropertyChanged,
 8                                 Mode=TwoWay}"/>
 9     </StackPanel>
10 </Border>

 

這個代碼塊和第二個相比唯一不同的是 UpdateSourceTrigger 被設置為 PropertyChanged. 正如這個名字暗示的, 這就意味着無論何時第二個TextBox的Text屬性發生變化時,第一個TextBox的屬性Text立馬被更新。

最后,我們最后的例子是將屬性 UpdateSourceTrigger 設置為 Explicit.

 1 <Border BorderThickness="2" Margin="0 20 0 0" BorderBrush="Brown" CornerRadius="5">
 2     <StackPanel>
 3         <TextBox x:Name="textInput3" Margin="5" />
 4         <TextBox x:Name="txtOutput3" Margin="5" 
 5                          Text="{Binding Text,
 6                                 ElementName=textInput3,
 7                                 UpdateSourceTrigger=Explicit,
 8                                 Mode=TwoWay}"/>
 9         <Button Content="Save" Click="Button_Click"/>
10     </StackPanel>
11 </Border>

不同的東西在這段代碼是UpdateSourceTrigger設置為Explicit。正如我們前面所說,這意味着更新過程不會發生,除非你做到明確操作。這個Button 被聲明在第二個TextBox后面負責做明確操作。正如你可能已經注意到,有一個EventHandler對它的點擊事件Clickevent,,下面幾行代碼都寫在那EventHandler里。

1 private void Button_Click(object sender, RoutedEventArgs e)
2 {
3     BindingExpression be = txtOutput3.GetBindingExpression(TextBox.TextProperty);
4     be.UpdateSource();
5 }

BindingExpression類聲明一個實例。在那之后,txtOutput3獲取TextBox.TextProperty的綁定表達式放在那個實例里。最后,UpdateSource方法的是被稱為明確的更新綁定源。

 代碼下載地址:http://www.codeproject.com/Articles/507883/UpdateSourceTrigger-Property-in-WPF-Binding


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM