2016-05-19 22 views
2

代理人が何であるか、そして自分のプログラムで使用しているかどうかを理解するには、何か助けが必要です。私は私のコマンドを実装するために別のスタックポストで見つけたRelayCommandクラスを使用しています。RelayCommandと代理人、代理人を理解しようとしています

RelayCommand:私のViewModelのコンストラクタで

public class RelayCommand : ICommand 
{ 
    readonly Action<object> _execute; 
    readonly Func<bool> _canExecute; 

    public RelayCommand(Action<object> execute, Func<bool> canExecute = null) 
    { 
     if (execute == null) 
      throw new ArgumentNullException(nameof(execute)); 

     _execute = execute; 
     _canExecute = canExecute; 
    } 

    public bool CanExecute(object parameter) 
    { 
     return _canExecute == null || _canExecute.Invoke(); 
    } 

    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

    public void Execute(object parameter) 
    { 
     _execute(parameter); 
    } 
} 

が、私はこれをやっている:

public ICommand SearchCommand { get; set; } 

//Constructor 
public BookingViewModel() 
{ 
    SearchCommand = new RelayCommand(SearchCommand_DoWork,() => true);  
} 

public async void SearchCommand_DoWork(object obj) 
{ 
    //Code inside this method not shown 
} 

私は、デリゲートメソッドをカプセル化タイプであることを知っています。

public delegate int MethodName(string name) 
デリゲートがintの戻り値の型を持っており、文字列のパラメータを取るメソッドmethodNameをカプセル化され

:あなたはこのようなデリゲートを書くことができます。

これは、コードに表示されているiのようなICommandを使用して作成されたデリゲートがあることを意味しますか?カプセル化の方法が "SearchCommand_DoWork"の場合

私にはいくつかのことができることを願っています。

答えて

2

これは、コードに表示されているiのようなICommandを使用して作成されたデリゲートがあることを意味しますか?カプセル化方法がSearchCommand_DoWorkの場合

RelayCommandタイプの新しいオブジェクトを作成しています。クラスのコンストラクタでわかるように、Actionオブジェクト(値を返さないデリゲート)とFuncオブジェクト(値を返すデリゲート)を渡しています。

アクションデリゲートの場合、パラメーターを取らず常にtrueを返すラムダ関数で渡しているFuncオブジェクトに対して、void関数SearchCommandDoWorkをカプセル化するオブジェクトを渡しています。

アクションデリゲートはSearchCommand_DoWork関数をカプセル化します(デリゲートは基本的に型セーフな関数ポインタです)。

ActionとFuncは、あらかじめ定義された代理人です。また、独自の代理人を定義することもできます。

public delegate int MethodName(string name) 

と同じです。

+0

あなたの答えをありがとう、それは本当に代議員についていくつかのことを明らかにしました。 – Mikkel