UpdateSourceTrigger Property in WPF Binding
来源:互联网 发布:细骨料试验记录数据 编辑:程序博客网 时间:2024/06/01 10:46
介绍
这篇文章我将介绍在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对它的点击事件Click
event,,下面几行代码都写在那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.Text
Property的绑定表达式放在那个实例里。最后,UpdateSource方法的是被称为明确的更新绑定源。
代码下载地址:http://www.codeproject.com/Articles/507883/UpdateSourceTrigger-Property-in-WPF-Binding
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- UpdateSourceTrigger Property in WPF Binding
- WPF UpdateSourceTrigger
- Dependency property in WPF
- WPF/UWP 绑定中的 UpdateSourceTrigger
- csharp: Data binding in WPF DataGrid control
- csharp: Data binding in WPF DataGrid control
- WPF-10:绑定时注意UpdateSourceTrigger
- WPF-10:绑定时注意UpdateSourceTrigger
- WPF教程(三十六)UpdateSourceTrigger属性
- WPF binding
- WPF BINDING
- WPF Binding
- WPF Binding
- WPF binding update notification for nested property when parent property changes
- Binding and styling text to a RichTextBox in WPF
- WPF data-binding
- WPF(Binding)
- WPF(Binding of ItemsControl)
- Android开发之Thread类分析
- 2013 多校联合4 1011 Fliping game (hdu 4642)
- Android实用问题汇总
- iOS: NSFileHandle的方法seekToEndOfFile
- VC调用DLL
- UpdateSourceTrigger Property in WPF Binding
- iOS: NSFileHandle的方法seekToFileOffset:
- Annotation
- poj2965解题报告
- hdu3659(贪心)
- iOS: NSFileHandle的方法synchronizeFile
- TCP/IP详解学习笔记(10)
- iOS: NSFileHandle的方法truncateFileAtOffset:
- uva 825