当TextChanged事件发生时,XAML文本框会更新。

6

我使用XAML和数据绑定(MVVM)进行开发。当用户在文本框中输入新字符时,我需要更新标签。

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个回答

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

MSDN How to: 控制 TextBox 文本何时更新源 :

TextBox.Text 属性的默认 UpdateSourceTrigger 值为 LostFocus。这意味着如果应用程序有一个绑定了数据的 TextBox.Text 属性的 TextBox,当你在 TextBox 中输入文本时,直到失去焦点(例如,当你点击 TextBox 以外的区域)才会将文本更新到源。

如果你想要随着输入即时更新源,请将绑定的 UpdateSourceTrigger 设置为 PropertyChanged。在下面的示例中,TextBox 和 TextBlock 的 Text 属性都绑定到同一个源属性上。TextBox 的 UpdateSourceTrigger 属性被设置为 PropertyChanged。


谢谢。我认为你犯了一个小错误,因为你的解决方案不起作用,但这个对我来说是正确的 Text="{Binding OriginalText, UpdateSourceTrigger=PropertyChanged}"。 - Bastien Vandamme
在 UWP Windows 10 应用程序中,我还必须添加 Mode=TwoWay。Text="{Binding OriginalText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" - Jeff Albrecht
在 UWP Windows 10 应用中,我还需要添加 Mode=TwoWay。Text="{Binding OriginalText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" - Jeff Albrecht

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接