Avalonia如何设置TextBox仅在回车或失焦时更新视图模型?
在Avalonia中实现TextBox仅回车/失焦时同步视图模型
完全可行,你可以通过调整绑定的更新触发模式,再配合回车事件处理来实现需求:
第一步:设置失焦时自动同步
Avalonia的TextBox默认使用UpdateSourceTrigger=PropertyChanged(按键即同步),只需把绑定的触发模式改为LostFocus,就能让文本在控件失去焦点时自动同步到视图模型:<TextBox Text="{Binding YourTextProperty, UpdateSourceTrigger=LostFocus}" />第二步:处理回车键手动同步
要实现回车时同步,给TextBox添加KeyDown事件,在事件中判断按下的是回车键时,手动触发绑定源更新:
先在XAML中绑定事件:<TextBox Text="{Binding YourTextProperty, UpdateSourceTrigger=LostFocus}" KeyDown="TextBox_OnKeyDown" />然后在后台代码中实现事件逻辑:
private void TextBox_OnKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { if (sender is TextBox textBox) { // 手动触发绑定源更新 textBox.GetBindingExpression(TextBox.TextProperty)?.UpdateSource(); // 可选操作:比如按下回车后让控件失去焦点,或者清空输入 textBox.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); } } }
如果你的项目采用纯MVVM模式不想写后台代码,也可以用KeyBinding把回车键绑定到视图模型的命令,在命令中直接更新对应属性,效果是一样的。
内容的提问来源于stack exchange,提问作者Daniel Farrell
相关产品推荐
相关产品推荐

