UpdateSourceTrigger Property in WPF Binding
介绍
这篇文章我将介绍在WPF和Silverlight中更新绑定源的概念。正如您所知道的,当我们用TwoWay的模式绑定时,任何在目标控件上发生的变化都会影响绑定源的值。
请注意只是在用TwoWay绑定的时候,而不是默认的绑定模式OneWay或者OneTime。
现在,问题是当更新源数据时,由于目标控件的数据发生的变化。实际上有三个方法可以实现。
- Default: 由不同控件控制. 例如
TextBox
, 当LostFocus
事件触发时,目标绑定发生变化. PropertyChanged
: 意味着当目标控件值发生变化时,源数据立马更新.例如,TextBox
是目标绑定,当输入字符时, 源数据也发生变化. 着就意味着当你输入字符创的时候,TextBox的数据Text也在改变.- Explicit: 当
UpdateSourceTrigger
设置为Explicit
, 数据源不会自动更新,只有在后代码里面显示的触发。
针对这些方法我写啦一些代码帮助你们更好的理解他们.我们首先从 default 开始. 看下面的代码块:
<Border BorderThickness="" Margin="0 20 0 0" BorderBrush="Brown" CornerRadius="">
<StackPanel>
<TextBox x:Name="textInput2" Margin="" />
<TextBox x:Name="txtOutput2" Margin=""
Text="{Binding Text,
ElementName=textInput2,
UpdateSourceTrigger=Default,
Mode=TwoWay}"/>
</StackPanel>
</Border>
这里有一个Border元素里面有一个StackPanel里面包含两个TextBox.第二个TextBox的Text属性绑定啦第一个TextBox的属性Text.在所有的例子里面实际上还有一些代码. 这个绑定的Mode
设置为 TwoWay
因为我们想更新源数据无论目标发生变化的时候. 最后, 绑定的属性UpdateSourceTrigger被设置为
Default
. 这就意味着当第二个TextBox的绑定目标丢失焦点或者触发LostFocus
事件时,第一个TextBox的属性Text绑定的源数据会被更新。
第二个例子是设置 UpdateSourceTrigger
为PropertyChanged
.
<Border BorderThickness="" BorderBrush="Brown" CornerRadius="">
<StackPanel>
<TextBox x:Name="textInput1" Margin="" />
<TextBox x:Name="txtOutput1" Margin=""
Text="{Binding Text,
ElementName=textInput1,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"/>
</StackPanel>
</Border>
这个代码块和第二个相比唯一不同的是 UpdateSourceTrigger
被设置为 PropertyChanged
. 正如这个名字暗示的, 这就意味着无论何时第二个TextBox的Text属性发生变化时,第一个TextBox的属性Text立马被更新。
最后,我们最后的例子是将属性 UpdateSourceTrigger
设置为 Explicit
.
<Border BorderThickness="" Margin="0 20 0 0" BorderBrush="Brown" CornerRadius="">
<StackPanel>
<TextBox x:Name="textInput3" Margin="" />
<TextBox x:Name="txtOutput3" Margin=""
Text="{Binding Text,
ElementName=textInput3,
UpdateSourceTrigger=Explicit,
Mode=TwoWay}"/>
<Button Content="Save" Click="Button_Click"/>
</StackPanel>
</Border>
不同的东西在这段代码是UpdateSourceTrigger设置为Explicit。正如我们前面所说,这意味着更新过程不会发生,除非你做到明确操作。这个Button
被声明在第二个TextBox后面负责做明确操作。正如你可能已经注意到,有一个EventHandler对它的点击事件Click
event,,下面几行代码都写在那EventHandler里。
private void Button_Click(object sender, RoutedEventArgs e)
{
BindingExpression be = txtOutput3.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
}
BindingExpression类声明一个实例。在那之后,txtOutput3获取TextBox.Text
Property的绑定表达式放在那个实例里。最后,UpdateSource方法的是被称为明确的更新绑定源。
代码下载地址:http://www.codeproject.com/Articles/507883/UpdateSourceTrigger-Property-in-WPF-Binding
UpdateSourceTrigger Property in WPF Binding的更多相关文章
- WPF Binding Mode,UpdateSourceTrigger
WPF 绑定模式(mode) 枚举值有5个1:OneWay(源变就更新目标属性)2:TwoWay(源变就更新目标并且目标变就更新源)3:OneTime(只根据源来设置目标,以后都不会变)4:OneWa ...
- WPF binding 参考
Introduction This is an article on WPF Binding Cheat Sheet. Some of the Binding won't work for Silve ...
- WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ...
- WPF Binding
winform有binding, WPF也有binding,区别在哪呢?这里暂时不提.以前也检查接触WPF binding, 但为什么过段时间就忘记了呢? 可能主要原因自己的知识体系不够完善吧,下面我 ...
- WPF Binding ElementName方式无效的解决方法--x:Reference绑定
原文:WPF Binding ElementName方式无效的解决方法--x:Reference绑定 需求: 背景:Grid的有一个TextBlock name:T1和一个ListBox,ListBo ...
- WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter
注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...
- WPF Binding值转换器ValueConverter使用简介(一)
WPF.Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为yyyyMMdd的日期,再如有一个值是根据另外多组值的不同而异 ...
- Wpf Binding.Path设置
Binding.Path 获取或设置绑定源属性的路径. 每个绑定通常都具有四个组件:绑定目标对象.目标属性.绑定源,以及要使用的绑定源值的路径.有关这些数据绑定概念的更多信息,请参见数据绑定概述. 使 ...
- .NET: WPF Binding对数据的校验和转换以及多路Binding
一.校验 一般需要对target上的值进行校验. xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns=" ...
随机推荐
- Python2.5-原理之模块
此部分来自于<Python学习手册>第五部分 一.模块(21章) 模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用..模块往往对应于python程序文件.每个文件就是一个模 ...
- 用canvas画“哆啦A梦”时钟
前言:今天看完了Js书的canvas画布那张,好开心~又是心爱的canvas~欧耶~ 之前看到有人建议我画蓝胖子,对哦,我怎么把童年最喜欢的蓝胖子忘了,为了表达我对蓝胖子的歉意,所以今天画了会动的he ...
- DEV winform treelist设置背景图像
treelist是一个复杂的控件,包括选中行,奇偶行等均可以单独设置显示效果,空白区域上背景图像的代码如下: private void treeList1_CustomDrawEmptyArea(ob ...
- scrollHeight,scrollLeft,offsetHeight,offsetLeft
scrollHeight:内部元素的绝对高度,包含内部元素的隐藏的部分scrollWidth:内部元素的绝对宽度,包含内部元素的隐藏的部分 scrollLeft:设置或获取位于对象左边界和窗口中目前可 ...
- C程序两则
<span style="font-size:24px;">#include<iostream> using namespace std; int *fun ...
- 软件工程(QLGY2015)第三次作业点评(含成绩)
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...
- 把php上传sae问题要使用IO
应用移植指南 一,为什么要移植应用 SAE禁止IO写操作,代码目录不能写入.这意味着普通程序的上传图片.生成缓存等操作都不能在SAE上正常运行,这时候你需要对这些代码进行修改后才能让你的程序运行在SA ...
- What is GSLB
Global Server Load Balancing 中文:全局负载均衡 SLB(Server load balancing)是对集群内物理主机的负载均衡,而GSLB是对物理集群的负载均衡.这里的 ...
- 利用ajaxfileupload.js异步上传文件
1.引入ajaxfileupload.js 2.html代码 <input type="file" id="enclosure" name="e ...
- [转]easyui 全部图标
原文地址:http://blog.163.com/shexinyang@126/blog/static/136739312201491011492263/ 拿jquery-easyui-1.2.6举例 ...