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 回答
3

您可以在没有任何参数的情况下定义命令“RemoveReferenceExcecute”

RelayCommand command = new RelayCommand(RemoveReferenceExcecute);}

或者您可以将一些参数/对象传递给它:

RelayCommand<object> command = new RelayCommand<object>((param)=> RemoveReferenceExcecute(param));}

在第二种情况下,不要忘记从您的视图中传递 CommandParameter;

于 2019-11-10T10:41:36.800 回答