委托系统.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);
}

为什么我得到以下异常,我该如何修复它?

委托的系统。

委托系统.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链接:

  1. System.Action
  2. 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(()=>{ 
            
    })