WPF UpdateSourceTrigger属性

2021-07-02 16:39

阅读:349

标签:方法   controls   html   tutorials   数据   alsa   tac   def   tar   

原文:WPF UpdateSourceTrigger属性

TextBox中的变化并不是立即传递到源,而是在TextBox失去焦点后,源才更新。这种表现由绑定中的UpdateSourceTrigger属性来控制。它的默认值是Default,源会根据你绑定的属性来更新。写这篇文章的时候,除了Text属性之外的所有属性,源会随属性的改变而立即更新。Text属性不一样,它只有在目标元素失焦后才更新。

 

UpdateSourceTrigger的默认值是Default,其他值有PropertyChangedLostFocusExplicit。前两个已经描述过了,最后一个是指必须通过手动推送来更新,通过调用UpdateSource

 

下面来看看上面这些选项是如何工作的,下面的例子由上一章的例子更新而来:


                
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();
                }
        }
}

  技术分享图片

 

面三个文本框分别使用了不同的UpdateSourceTrigger

 

第一个使用的是Explicit,源不会更新除非你手动来操作。正因为这个原因,我在这个TextBox旁边添加了一个按钮,用于手动更新源。在后台代码中,我们看到点击事件处理方法里面只有两行代码,第一行获取目标控件的绑定,第二行调用UpdateSource()方法。

第二个使用的是LostFocus,对于Text绑定来说其实就是一个默认值。也就是说一旦目标控件失去焦点,源就会被更新。

第三个使用的是PropertyChanged,一旦绑定的属性值改变,源会立即更新。本例中文本改变就产生这种效果。

 

绑定的UpdateSourceTrigger属性用来控制改变的值何时传递给源。WPF很容易控制这些,一般情况下默认值足以应付大多数例子。你可以同时获得持续更新的UI和良好的性能。

在其他情况下,你需要使用更多的进程控制,这个属性将非常有用。记住很多你不更新源的地方,往往是需要被更新的。如果你想完全获得掌控权,那么使用Explicit,然后手动更新,但是这个超出了数据绑定这一块的内容。

WPF UpdateSourceTrigger属性

标签:方法   controls   html   tutorials   数据   alsa   tac   def   tar   

原文地址:https://www.cnblogs.com/lonelyxmas/p/9919416.html


评论


亲,登录后才可以留言!