5

アクション :

readonly Action _execute;

public RelayCommand(Action execute)
             : this(execute, null)
{
}

public RelayCommand(Action execute, Func<Boolean> canExecute)
{
    if (execute == null)
        throw new ArgumentNullException("execute");
    _execute = execute;
    _canExecute = canExecute;
}

他のクラスのコード:

public void CreateCommand()
{
    RelayCommand command = new RelayCommand((param)=> RemoveReferenceExcecute(param));}
}

private void RemoveReferenceExcecute(object param)
{
    ReferenceViewModel referenceViewModel = (ReferenceViewModel) param;
    ReferenceCollection.Remove(referenceViewModel);
}

次の例外が発生するのはなぜですか?どうすれば修正できますか?

デリゲート 'System.Action' は引数を 1 つ取りません

4

2 に答える 2

9

System.Actionパラメータなし関数のデリゲートです。を使用しSystem.Action<T>ます。

これを修正するには、RelayActionクラスを次のようなものに置き換えます

class RelayAction<T> {
    readonly Action<T> _execute;
    public RelayCommand(Action<T> execute, Func<Boolean> canExecute){
        //your code here
    }
    // the rest of the class definition
}

RelayActionクラスはジェネリックになる必要があることに注意してください。別の方法は、受け取るパラメーターのタイプを直接指定することですが、この方法では、クラス_executeの使用が制限されます。RelayActionしたがって、柔軟性と堅牢性の間にはトレードオフがあります。

いくつかの MSDN リンク:

  1. System.Action
  2. System.Action<T>
于 2012-12-25T09:59:16.717 に答える