WPF UpdateSourceTrigger属性

在输入时,除了Text属性之外的所有属性在属性更改时立即更新(PropertyChanged),而当目标元素丢失焦点时(LostFocus),Text属性才会更新。

显然,Default是UpdateSourceTrigger的默认值。其他选项是PropertyChangedLostFocusExplicit。前两个已经描述过,而最后一个只是意味着必须手动推送更新,使用Binding上的UpdateSource调用。

如您所见,三个文本框中的每一个现在都使用不同的UpdateSourceTrigger.

第一个设置为Explicit,这基本上意味着除非您手动执行,否则不会更新源。出于这个原因,我在TextBox旁边添加了一个按钮,它将根据需要更新源值。在Code-behind中,您将找到Click处理程序,我们使用几行代码从目标控件获取绑定,然后在其上调用UpdateSource()方法。

第二个TextBox使用LostFocus值,这实际上是Text绑定的默认值。这意味着每次目标控件失去焦点时都会更新源值。

第三个也是最后一个TextBox使用PropertyChanged值,这意味着每次绑定属性更改时都会更新源值,在这种情况下,只要文本更改,它就会更新。

尝试在您自己的计算机上运行该示例,并查看三个文本框的行为完全不同:第一个值在您单击按钮之前不会更新,第二个值在您离开TextBox之前不会更新,而第三个值会自动更新每次击键,文字更改等

<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DataContextSample" Height="130" Width="310">
	<StackPanel Margin="15">
		<WrapPanel>
			<TextBlock Text="Window title:  " />
			<TextBox Name="txtWindowTitle" Text="{Binding Title, UpdateSourceTrigger=Explicit}" Width="150" />
			<Button Name="btnUpdateSource" Click="btnUpdateSource_Click" Margin="5,0" Padding="5,0">*</Button>
		</WrapPanel>
		<WrapPanel Margin="0,10,0,0">
			<TextBlock Text="Window dimensions: " />
			<TextBox Text="{Binding Width, UpdateSourceTrigger=LostFocus}" Width="50" />
			<TextBlock Text=" x " />
			<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50" />
		</WrapPanel>
	</StackPanel>
</Window>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace WpfTutorialSamples.DataBinding
{
	public partial class DataContextSample : Window
	{
		public DataContextSample()
		{
			InitializeComponent();
			this.DataContext = this;
		}
		private void btnUpdateSource_Click(object sender, RoutedEventArgs e)
		{
			BindingExpression binding = txtWindowTitle.GetBindingExpression(TextBox.TextProperty);
			binding.UpdateSource();
		}
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值