TextChanged事件时更新了XAML文本框

时间:2012-07-17 12:21:23

标签: c# .net xaml data-binding

我使用XAML和数据绑定(MVVM)。当我的用户在TextBox中编写新的文本字符时,我需要更新Label。

XAML

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="textBox1" VerticalAlignment="Top" Width="463" Text="{Binding OriginalText}"/>
        <Label Height="28" HorizontalAlignment="Left" Margin="12,41,0,0" Name="label1" VerticalAlignment="Top" Width="463" Content="{Binding ModifiedText}"/>
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="400,276,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
    </Grid>
</Window>

视图模型

    class MainViewModel : NotifyPropertyChangedBase
    {
        private string _originalText = string.Empty;
        public string OriginalText
        {
            get { return _originalText; }
            set
            {
                _originalText = value;
                NotifyPropertyChanged("OriginalText");
                NotifyPropertyChanged("ModifiedText");
            }
        }

        public string ModifiedText
        {
            get { return _originalText.ToUpper(); }
        }
    }

我在XAML中添加了一个按钮。按钮什么都不做,但帮助我失去了文本框的焦点。当我失去焦点时,绑定会更新,上面的文字会出现在我的标签中。但是,当文本失去焦点时,数据绑定才会更新。 TextChanged事件不会更新绑定。我想强制更新TextChanged事件。我怎样才能做到这一点?我应该使用什么组件?

1 个答案:

答案 0 :(得分:14)

 <TextBox Name="textBox1"
      Height="23" Width="463"
      HorizontalAlignment="Left" 
      Margin="12,12,0,0"   
      VerticalAlignment="Top"
      Text="{Binding OriginalText, UpdateSourceTrigger=PropertyChanged}" /> 

MSDN How to: Control When the TextBox Text Updates the Source

  

TextBox.Text属性的默认值 UpdateSourceTrigger 为   的引发LostFocus 即可。这意味着如果应用程序具有带有的TextBox   数据绑定TextBox.Text属性,您在TextBox中键入的文本   在TextBox失去焦点之前不会更新源(for   例如,当您单击TextBox时。)

     

如果您希望源代码在键入时更新,请设置   绑定到 PropertyChanged 的UpdateSourceTrigger。在里面   下面的例子,TextBox和Text的Text属性   TextBlock绑定到相同的source属性。该   TextBox绑定的UpdateSourceTrigger属性设置为   的PropertyChanged。