介绍

这篇文章我将介绍在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对它的点击事件Clickevent,,下面几行代码都写在那EventHandler里。

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

BindingExpression类声明一个实例。在那之后,txtOutput3获取TextBox.TextProperty的绑定表达式放在那个实例里。最后,UpdateSource方法的是被称为明确的更新绑定源。

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

UpdateSourceTrigger Property in WPF Binding的更多相关文章

  1. WPF Binding Mode,UpdateSourceTrigger

    WPF 绑定模式(mode) 枚举值有5个1:OneWay(源变就更新目标属性)2:TwoWay(源变就更新目标并且目标变就更新源)3:OneTime(只根据源来设置目标,以后都不会变)4:OneWa ...

  2. WPF binding 参考

    Introduction This is an article on WPF Binding Cheat Sheet. Some of the Binding won't work for Silve ...

  3. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ...

  4. WPF Binding

    winform有binding, WPF也有binding,区别在哪呢?这里暂时不提.以前也检查接触WPF binding, 但为什么过段时间就忘记了呢? 可能主要原因自己的知识体系不够完善吧,下面我 ...

  5. WPF Binding ElementName方式无效的解决方法--x:Reference绑定

    原文:WPF Binding ElementName方式无效的解决方法--x:Reference绑定 需求: 背景:Grid的有一个TextBlock name:T1和一个ListBox,ListBo ...

  6. WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter

    注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...

  7. WPF Binding值转换器ValueConverter使用简介(一)

    WPF.Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为yyyyMMdd的日期,再如有一个值是根据另外多组值的不同而异 ...

  8. Wpf Binding.Path设置

    Binding.Path 获取或设置绑定源属性的路径. 每个绑定通常都具有四个组件:绑定目标对象.目标属性.绑定源,以及要使用的绑定源值的路径.有关这些数据绑定概念的更多信息,请参见数据绑定概述. 使 ...

  9. .NET: WPF Binding对数据的校验和转换以及多路Binding

    一.校验 一般需要对target上的值进行校验. xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns=" ...

随机推荐

  1. lecture9-提高模型泛化能力的方法

    HInton第9课,这节课没有放论文进去.....如有不对之处还望指正.话说hinton的课果然信息量够大.推荐认真看PRML<Pattern Recognition and Machine L ...

  2. 微信公众平台开发(71)OAuth2.0网页授权

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...

  3. JS之获取属性总结

    嗨,我是沐晴,今天来说说JS中关于获取属性的一些方法和区别.闲话不说,来正题. 首先什么是属性呢,比如input标签,标签中的value id type style等,这些就是属性.我们JS获取属性一 ...

  4. Android子线程真的不能更新UI么

    Android单线程模型是这样描述的: Android UI操作并不是线程安全的,并且这些操作必须在UI线程执行 如果在其它线程访问UI线程,Android提供了以下的方式: Activity.run ...

  5. BroadcastReceive之ip拨号

    首先,新建一个类,继承于BroadcastReceive,然后去配置Manifest.xml <receiver android:name=".PhoneOnReceice" ...

  6. 一个奇妙的java坑:Long 类型的比较

    Long userId=127L; Long authorId=127L; System.out.println(userId==authorId);//true userId=128L; autho ...

  7. 【JavaScript】 闭包 我战战兢兢的接触了它

    源:http://www.liaoxuefeng.com 1. 注意这里用了一个“创建一个匿名函数并立刻执行”的语法: (function (x) { return x * x; })(3); 理论上 ...

  8. 如何在word中的第3+n页处插入页面并重新从1开始

    在插入页码时有时可能会遇到这种情况: word的第一页是文档名称 第二页是目录 第三页才开始是正文,而我们希望看到页码从第三页开始才是第1页. 在第三页的开头,插入分隔符“下一页”,如果office2 ...

  9. 50ms延时程序

    12MHz晶振 一个机器周期2us, DEL:  MOV  R7,#200D DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 ;125*2=250us DJNZ  R7,DE ...

  10. 分布式搜索引擎Elasticsearch PHP类封装 使用原生api

    //官方的 php  api写的鸡肋了,下面这个类可以使用 es api 操作. <?php class ElasticSearch { public $index; function __co ...