C#/UWP:如何让TextBox双向绑定随每次按键实时更新字段
UWP TextBox双向绑定实时更新(按键即同步)解决方案
嘿,这个问题其实挺常见的——UWP里TextBox的双向绑定默认是失去焦点时才更新绑定源(对应UpdateSourceTrigger.LostFocus),所以你才会看到只有离开TextBox后MyField才变化。要实现每按一个键就同步更新,只需要修改绑定的触发时机就行。
直接修改XAML绑定表达式
在你的TextBox绑定里加上UpdateSourceTrigger=PropertyChanged,这会告诉绑定系统:只要TextBox的Text属性一变,就立刻把值同步到绑定的MyField字段里。修改后的代码如下:
<StackPanel Name="MyStackPanel" Margin="10"> <TextBox Header="MyTextBox:Item1" Text="{Binding MyField, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> <Button Name="MyButton" Content="Next" Click="Next_Item"/> </StackPanel>
配套的必要设置(别漏了!)
要让双向绑定完全生效,你的MyItem类得实现INotifyPropertyChanged接口,这样当MyField的值从代码里改变时,UI也能同步更新。给你个简单的实现示例:
using System.ComponentModel; using System.Runtime.CompilerServices; public class MyItem : INotifyPropertyChanged { private string _myField; public string MyField { get => _myField; set { if (_myField != value) { _myField = value; OnPropertyChanged(); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
另外,别忘了给MyStackPanel设置正确的DataContext,比如在页面的构造函数里:
public MainPage() { InitializeComponent(); MyStackPanel.DataContext = new MyItem(); }
这样改完之后,你每敲一个字符,MyField就会立刻得到最新的值,不用再等TextBox失去焦点啦!
内容的提问来源于stack exchange,提问作者Bimo
相关产品推荐
相关产品推荐

