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

Xamarin.Forms多Entry绑定同一TextChanged事件时如何避免非触发Entry被修改

问题根因

你现在的代码存在事件循环触发的问题:

  • 当你修改Entry1的内容触发TextChanged事件后,你在事件里给Entry2赋值的操作会再次触发Entry2的TextChanged事件
  • Entry2触发的事件逻辑里又会给Entry1赋值,最终就出现了双向修改的异常结果
  • 额外你当前代码的赋值内容和需求也不符:需求要求Entry1输入时Entry2填Yess,Entry2输入时Entry1填Noo,现有代码逻辑是反过来的

修复方案

新增全局标志位判断当前是否是代码主动修改Entry内容,避免重复触发联动逻辑即可,修改后的后台代码如下:

// 新增全局标志位,标记是否是代码主动修改内容
private bool _isProgrammaticChanging = false;

private async void OnEntryTextChange(object sender, TextChangedEventArgs e)
{
    // 如果是代码主动修改的,直接跳过逻辑,避免循环触发
    if (_isProgrammaticChanging) return;
    
    var EntryTapped = (Xamarin.Forms.Entry)sender;
    Device.BeginInvokeOnMainThread(() => {
        // 先把标志位设为true,代表接下来的修改是代码主动操作
        _isProgrammaticChanging = true;
        try
        {
            if (EntryTapped.ClassId == "1")
            {
                // 符合需求:Entry1输入时Entry2填Yess
                myWord2.Text = "Yess";                         
            }
            else if (EntryTapped.ClassId == "2")
            {
                // 符合需求:Entry2输入时Entry1填Noo
                myWord1.Text = "Noo";                           
            }
        }
        finally
        {
            // 操作完成后重置标志位,恢复对用户输入的响应
            _isProgrammaticChanging = false;
        }
    });
}

注意:你现有Xaml代码里第一个Entry的属性之间缺少空格,x:Name="myWord1"TextChanged需要修改为x:Name="myWord1" TextChanged,避免出现编译异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:48:01