如何获取Custom OnClickListener的EventArgs

时间:2017-11-21 13:53:27

标签: c# android xamarin xamarin.android onclicklistener

我需要制作自定义点击监听器,但我在语法方面遇到了一些问题。

这更像是一个c#问题,因为我试图在Xamarin.Android上实现这个问题

这是我的自定义点击监听器

public class OnSingleClickListener : Java.Lang.Object,  View.IOnClickListener
{
    private readonly Action onSingleClick;

    public OnSingleClickListener()
    {
    }

    public OnSingleClickListener(Action onSingleClick)
    {
        this.onSingleClick = onSingleClick;
    }

    public void OnClick(View v)
    {
        onSingleClick?.Invoke();     
    }
}

在我的片段中,我实施了:

button.SetOnClickListener(new OnSingleClickListener(() 
                => OnButtonClicked(HowDoIPassEventArgs?)));

然后

private void OnButtonClicked(HowDoIGetTheseEventArgs?)
{
    ViewModel.buttonCommand.Execute(HowDoIGetTheseEventArgs?);
}

如何通过我的新方法获取此点击的EventArgs' OnButtonClicked'?

///////// 编辑:这是之前实现的方式 -

button.Click += OnButtonClicked;

private void OnButtonClicked(object sender, EventArgs args) //I want these same EventArgs
{
    ViewModel.buttonCommand.Execute(args);
}

我只想使用我的新自定义点击监听器

来实现它

1 个答案:

答案 0 :(得分:1)

使用EventHandlerAction并定义您希望在处理程序中传递的自定义EventArgs子类。

public class OnClickListener : Java.Lang.Object, View.IOnClickListener
{
    public class ClickEventArgs : EventArgs
    {
        object someObjectYouWantToPass; // replace with a strong object type that you are passing
        public ClickEventArgs(object someObjectYouWantToPass) => this.someObjectYouWantToPass = someObjectYouWantToPass;
    }

    readonly EventHandler handler;
    public OnClickListener(EventHandler handler) => this.handler = handler;

    public void OnClick(View v)
    {
        handler?.Invoke(v, new ClickEventArgs(null)); // replace null w/ your custom event object(s)
    }
}