You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI.NET实现类似LostFocus时更新绑定的需求与解决尝试

.NET MAUI Entry绑定仅在失去焦点时更新ViewModel属性

简介
使用MAUI.NET搭配MVVM架构,必要时可牺牲MVVM。常规实现方式:ViewModel中实现INotifyPropertyChanged的属性绑定到View里Entry的Text属性,View的BindingContext设置为该ViewModel。

需求
希望绑定仅在用户离开Entry控件(点击外部或按TAB键)时执行(即调用属性的set方法),而非默认的每输入一个字符就触发一次。

示例
用户在Entry中输入1234时,ViewModel中绑定属性的set方法会触发4次(每次按键一次),我希望仅在用户结束编辑该控件后触发一次。

尝试过的方案
这看似基础需求,我已尝试以下方法:

  • 寻找WPF中UpdateSourceTrigger="LostFocus"的等效实现
  • 尝试使用UpdateSourceEventName并指定Completed或Unfocused
  • 尝试手动更新绑定:已通过Unfocused事件的参数private void Entry_Unfocused(object sender, FocusEventArgs e) { if(!e.IsFocused) { ...捕获用户离开Entry的时机,但找不到WPF中BindingOperations.GetBindingExpression的等效方法,且sender as Entry仅提供SetBinding方法,无获取绑定的方法
  • 已搜索近2小时

临时解决方案
我实现了一个临时的变通方案:

  • 在ViewModel中新增一个ValueTemp属性,绑定到Entry的Text属性
  • 将原ViewModel中的Value属性绑定到Placeholder(需绑定到某个对象以触发getter,也可使用多绑定加转换器或不可见标签),并在其getter中为ValueTemp赋值
  • 在Entry_Unfocused事件中获取ValueTemp的值并赋值给原Value属性(我的场景中Completed事件未触发)
  • 需处理PropertyChanged和双向同步的相关细节
  • 实际代码更复杂,无法完整展示,核心是用临时属性绑定View,用户结束编辑后同步到正式属性

内容的提问来源于stack exchange,提问作者jaydopartu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:35:13