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

.NET MAUI MVVM:Entry失焦时通过ReturnCommand获取更新值异常

解决.NET MAUI Entry ReturnCommand触发时绑定属性未更新的问题

问题根因

默认情况下,Entry的Text属性使用TwoWay绑定时,更新ViewModel属性的时机是LostFocus(输入框失去焦点)。而ReturnCommand在用户按下回车键时立即触发,此时输入框焦点尚未真正转移,导致ViewModel中的NumberBoxBuy还未同步到最新输入值。

可行解决方案

方案1:修改绑定的更新触发时机

直接在XAML绑定中指定UpdateSourceTrigger为PropertyChanged,让输入框文本每变化一次就同步更新到ViewModel:

<Entry Placeholder="Cantidad Cajas"
       Text="{Binding NumberBoxBuy, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
       ReturnCommand="{Binding EntryCompletedCommand}"
       ClearButtonVisibility="WhileEditing"/>

此方案适合需要实时同步输入内容的场景,触发ReturnCommand时能直接拿到最新值。

方案2:触发命令前手动强制更新绑定

若不想频繁同步输入内容(比如输入长数字时),可在Completed事件中手动触发绑定更新,再执行命令:

  1. 给Entry命名并保留原有绑定:
<Entry x:Name="BoxBuyEntry"
       Placeholder="Cantidad Cajas"
       Text="{Binding NumberBoxBuy, Mode=TwoWay}"
       ReturnCommand="{Binding EntryCompletedCommand}"
       ClearButtonVisibility="WhileEditing"/>
  1. 在页面代码隐藏中添加事件处理:
public YourPage()
{
    InitializeComponent();
    BoxBuyEntry.Completed += (s, e) =>
    {
        // 强制同步输入框值到ViewModel
        BoxBuyEntry.GetBindingExpression(Entry.TextProperty)?.UpdateSource();
    };
}

方案3:封装自定义Entry控件

如果多个页面需要此逻辑,可封装一个自动更新绑定的自定义Entry:

public class AutoUpdateEntry : Entry
{
    protected override void OnCompleted()
    {
        // 先同步绑定源,再执行默认Completed逻辑
        GetBindingExpression(TextProperty)?.UpdateSource();
        base.OnCompleted();
    }
}

在XAML中引用自定义控件即可:

<local:AutoUpdateEntry Placeholder="Cantidad Cajas"
                       Text="{Binding NumberBoxBuy, Mode=TwoWay}"
                       ReturnCommand="{Binding EntryCompletedCommand}"
                       ClearButtonVisibility="WhileEditing"/>

验证效果

采用任意方案后,触发ReturnCommand时,ViewModel的EntryCompleted方法中即可输出最新的NumberBoxBuy值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:10:06