介绍

这篇文章我将介绍在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. lecture12-玻尔兹曼机和受限玻尔兹曼机

    这是Hinton的第12课,结合前一课可以知道RBM是来自BM,而BM是来自Hopfield的,因为水平有限,是直译的,虽然有时候会看不懂,但是好歹不会曲解原来的本意,看的话:1.先看ppt:2.通读 ...

  2. 设置svg图片大小

    background-image: url(/resources/img/liveSupport/tx_1.svg); background-size: 16px 16px; width: 16px; ...

  3. 你是否还在质疑EF的性能

    1. 写在前面的话 一直没有写博客的习惯,感觉太浪费时间,没有那么多精力,其实仔细一想,写博客是一种习惯,也是一种心境,同时也是对自己所掌握的知识结构的一个梳理过程,对自己知识体系的一个巩固,同时也是 ...

  4. 通过android 客户端上传图片到服务器

    昨天,(在我的上一篇博客中)写了通过浏览器上传图片到服务器(php),今天将这个功能付诸实践.(还完善了服务端的代码) 不试不知道,原来通过android 向服务端发送图片还真是挺麻烦的一件事. 上传 ...

  5. linux基础-第十五单元 软件包的管理

    使用RPM安装及移除软件 什么是RPM rpm的文件名 rpm软件安装与移除工作中经常使用的选项 查看RPM软件包中的信息 查询已安装的软件包信息 RPM包的属性依赖性问题 什么是RPM包的属性依赖性 ...

  6. Android M 控件:Snackbar、Toolbar、TabLayout、NavigationView

    Snackbar Snackbar提供了一个介于Toast和AlertDialog之间轻量级控件,它可以很方便的提供消息的提示和动作反馈.Snackbar的使用与Toast的使用基本相同: Snack ...

  7. Linux_rsylogd日志

    Linux_日志管理介绍(一)http://www.cnblogs.com/gossip/p/5972663.html Linux_rsyslogd日志服务(二)http://www.cnblogs. ...

  8. java.net.URL请求远程文件下载

    1:浏览器请求下载 public void listStockcodeUplaod(HttpServletRequest req, HttpServletResponse res) throws Ex ...

  9. 简进祥==iOS 3DES加密解密

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

  10. 【poj3764】 The xor-longest Path

    http://poj.org/problem?id=3764 (题目链接) 今天的考试题,看到异或就有点虚,根本没往正解上想.. 题意 给出一棵带权树,请找出树上的一条路径,使其边上权值的异或和最大. ...