如何将 EditText.TextChanged 事件传递给父级?

How to pass EditText.TextChanged Event to Parent?

通常我使用此代码来处理 EditText

中的 TextChanged
EditText myEditText = new EditText(Context);
myEditText.TextChanged += (sender, e) => { /* do something */ };

现在,我定义了自己的 LinearLayout,其中包含一个 EditText。我的问题是,如何 将 TextChanged 事件从 EditText 传递到 LinearLayout 的方法,这样我就可以调用

MyLinearLayout.TextChanged 而不是 MyLinearLayout.editText.TextChanged

public class MyLinearLayout : LinearLayout
{
    private EditText editText;

    public MyLinearLayout(Context context) : base(context)
    {
        LayoutParameters = new LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);

        editText = new EditText(context);
        AddView(_editText);
    }


    // some method like this
    public event EventHandler<Android.Text.TextChangedEventArgs> TextChanged
    {
        // just passes the _editText.TextChanged
    }
}

您可以在自定义 LinearLayout 中定义一个 EventHandler ,并在调用 EditText 的 TextChanged 事件时调用它

using System;
using Android.Content;
using Android.Runtime;
using Android.Text;
using Android.Util;
using Android.Views;
using Android.Widget;
using Android.Graphics;
namespace App11
{
    public class MyLinearLayout : LinearLayout
    {
        private EditText editText;               

        public MyLinearLayout(Context context, IAttributeSet attrs) : base(context, attrs)
        {
            LayoutParameters = new LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent);

            editText = new EditText(context);

            editText.TextChanged += EditText_TextChanged;

            AddView(editText, LayoutParameters);
        }



        private void EditText_TextChanged(object sender, Android.Text.TextChangedEventArgs e)
        {
            TextChanged.Invoke(this, e);
        }


        public event EventHandler<TextChangedEventArgs> TextChanged;
    }
}
MyLinearLayout myLinearLayout = FindViewById<MyLinearLayout>(Resource.Id.myLinearLayout);
myLinearLayout.TextChanged += MyLinearLayout_TextChanged;

private void MyLinearLayout_TextChanged(object sender, TextChangedEventArgs e)
{
  Console.WriteLine(e.Text);
}