2017-05-19 11 views
-1

要素でイベントを使用する場合、EventHandlerの名前を文字列として書き込むことができます。<Button Click="OnButtonClick" ..>。さらに、Visual Studioでは、コードビハインドにこのようなEventHandlerが実際に存在するかどうかをチェックします。 (これはReSharperの機能かもしれませんが、私は分かりません)XAMLでの代理人の使用

要素に追加するFuncについては、どうすればいいですか?私はEventHandlerのような設計時のソリューションを探しています)

Funcを返すviewmodelプロパティが必要ですXAMLにイベントハンドラまたはそれに近い同等のものを扱うようにしたいと考えています。

+1

私は10年前からC#をやっていました。 「要素に追加するFunc」が何であるかを理解するのに役立つことができますか?どのように追加していますか? –

+0

Func型のプロパティを含むクラス(実際にはどのタイプのデリゲートでもかまいません)。要するに、私は戻り値の型を持つハンドラを目指しています。 –

+0

デリゲートを直接XAML属性にバインドすることはできません。メソッド(イベントハンドラと同じ)をラップするか、TypeConverterで '{Binding} 'を使用して' Func'を ' MethodInfo'(IIRC - 実際にはうまくいくかどうかはわかりませんが)。理想的には 'Click 'の代わりに' Command = "{Binding}"を使うべきですが、これは別の議論です)。 – Dai

答えて

0

これは、DependencyPropertyを使用して実行できます。

例:あなたのXAMLで

class MyCoolButton : Button 
{ 
    public Func<int, int> MyFunc 
    { 
     get { return (Func<int, int>)GetValue(MyFuncProperty); } 
     set { SetValue(MyFuncProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for MyFunc. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty MyFuncProperty = 
     DependencyProperty.Register("MyFunc", typeof(Func<int, int>), typeof(MyCoolButton), new PropertyMetadata(null)); 
} 

あなたがそれを設定します:

<controls:MyCoolButton MyFunc="DoSomething" /> 

そして背後にあるコードで: あなたのクールなボタンから関数を呼び出す

private int DoSomething(int foo) 
{ 
    return foo++; 
} 

同じように簡単です

if (MyFunc != null) 
{ 
    MyFunc(value); 
} 
0

私はあなたの質問を正確に理解していません。あなたはボタンのようにEventHandlerはちょうどpublic event EventHandler Clicked;

public class CustomButton : Button 
{ 
    public CustomButton() 
    { 
    } 

    public event EventHandler Tapped; 
} 

を使用したい場合は、私が代わりにコードビハインドで、バインディングのアプローチを使用するためにあなたを示唆して行います。