介绍

这篇文章我将介绍在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. 你真的熟悉background吗?

    一两个月没更新博客了,因为放假刚在深圳找了实习,一直都比较忙碌,不过我觉得再忙,还是需要时间去沉淀一些东西,工作的时候别人看到的只是你有没有实现最终的结果,但自己是否思考,是否去总结,决定着你工作是否 ...

  2. JQuery 图片略缩与弹出预览 jqthumb fancybox

    弹出框插件-FANCYBOXhttp://www.jq22.com/jquery-info28 jqthumb.js缩略图插件 http://www.ijquery.cn/?p=798

  3. 系统升级日记(2)- 升级到SharePoint Server 2013

    最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...

  4. [BZOJ1407][NOI2002]Savage(扩展欧几里德)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1407 分析: m,n范围都不大,所以可以考虑枚举 先枚举m,然后判定某个m行不行 某个 ...

  5. 【BZOJ1003】【ZJOI2006】物流运输

    1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2556  Solved: 1008[Submit] ...

  6. 什么是viewport,为什么需要viewport

    viewport:视口,视觉窗口,显示区域.在显示面积上手机屏幕相对桌面显示器要小很多,在几年前(现在也如此)大部分网站都是为桌面显示器浏览而设计,很少考虑到适应手机屏幕,所以如果用手机浏览大多网站时 ...

  7. 【Python】[函数] 函数的参数与递归函数

    一.函数的参数1.位置参数2.默认参数 n就是默认参数 def power(x,n=2): s=1 while n > 0: n = n - 1 s = s * x return s 默认参数有 ...

  8. iOS -- 神战

    http://github.ibireme.com/github/list/ios/# https://github.com/Tim9Liu9/TimLiu-iOS http://www.ios122 ...

  9. PHP-- 三种数据库随机查询语句写法

    1. Oracle,随机查询查询语句-20条 select * from (  select  *  from 表名 order by dbms_random.value ) where rownum ...

  10. [cross domain] four approachs to cross domain in javascript

    four approachs can cross domain in javascript 1.jsonp 2.document.domain(only in frame and they have ...