2017-11-21 4 views
-1

カスタムクリックリスナーを作成する必要がありましたが、構文に問題があります。カスタムOnClickListenerのEventArgsを取得するには

は私がXamarin.Android

にこれを実装しようとしていますので、これは、AC#質問の詳細ですここに私のカスタムは私の断片でリスナー

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?); 
} 

新しいメソッド 'OnButtonClicked'でこのクリックからEventArgsを取得するにはどうすればよいですか?

///////// 編集:これは、それが前に実装された方法です -

button.Click += OnButtonClicked; 

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

私はちょうどそれを同じに実装したいが、私の新しいカスタムでリスナー

+0

どのような 'EventArgs'ですか? OnClick内でViewを取得してそこに配置することで、自分でそれを作成する必要があります。 – Selvin

+0

ViewModel.buttonCommand'はどのように定義されていますか? ...それはprolly 'ICommand'なので、引数は"誰が "clieckedに依存していますが、いくつかのバインディングに依存していますので、' ViewModel.buttonCommand.Execute(textView1.getText()) 'やそれが期待するもの – Selvin

+0

を取得する@セルヴィン私は私の質問を編集しました、あなたは私を助けてくれますか? – stepheaw

答えて

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) 
    } 
} 
関連する問題