委托系统.Action不接受1个参数
本文关键字:1个 参数 不接受 Action 系统 | 更新日期: 2023-09-27 17:49:33
动作:
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
为无参数函数委托。使用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<T>
你可以定义你的命令' removereferenceexecute '不需要任何参数
RelayCommand command = new RelayCommand(RemoveReferenceExcecute);}
或者你可以向它传递一些参数/对象:
RelayCommand<object> command = new RelayCommand<object>((param)=> RemoveReferenceExcecute(param));}
对于第二种情况,不要忘记从视图传递CommandParameter;
我的情况就是这样。
这个方法需要一个空的动作
public LTDescr setOnStart( Action onStart ){
this._optional.onStart = onStart;
return this;
}
这是调用
的方法 .setOnStart(()=>{
})