UpdateSourceTrigger Property in WPF Binding

WPF绑定更新机制
本文详细介绍了WPF和Silverlight中绑定源更新的不同方式,包括Default、PropertyChanged和Explicit三种UpdateSourceTrigger选项,并通过示例代码展示了每种方式的具体应用。

介绍

这篇文章我将介绍在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对它的点击事件Clickevent,,下面几行代码都写在那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.TextProperty的绑定表达式放在那个实例里。最后,UpdateSource方法的是被称为明确的更新绑定源。

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

转载于:https://www.cnblogs.com/kissfu/p/3230080.html

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值