动作:
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);
}
为什么会出现以下异常,该如何解决?
Delegate'System.Action'不使用1个参数
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链接:
System.Action
System.Action
您可以定义命令'RemoveReferenceExcecute',而无需任何参数