用带参数的函数委托命令

本文关键字:命令 函数 参数 | 更新日期: 2023-09-27 18:02:56

ModelRequestCommand = new DelegateCommand(PopulateModelRequest);

没有错误,很好,但是我想传递一个参数(int ProgramID)到填充模型请求。ProgramID由

定义
this.ProgramId = ProgramID;

当我尝试

时,它给出一个错误
ModelRequestCommand = new DelegateCommand(PopulateModelRequest(int ProgramID);

我该怎么做呢?

WPF中的按钮绑定到ModelRequestCommand

用带参数的函数委托命令

看起来您试图在函数调用期间声明一个参数。然后尝试将该调用的结果(应该是void)传递给期望Action<object>Action委托的构造函数。你不能这么做。

再次,ICommand接口Execute方法(这是您真正实现的)看起来像这样:

void Execute(object parameter)

其中参数通过调用对象(即Button)的CommandParameter属性传递。DelegateCommand对象实现了这一点,并使用相同的参数调用传递给构造函数的委托(该类的某些版本允许您传递一个简单的Action, DelegateCommand会为您忽略parameter)。

要修复它,要么将ProgramID传递给CommandParameter,然后这样做:

private void PopulateModelRequest(object parameter)
{
   int programId = (int)parameter;
}

或者类似

的东西
new DelegateCommand(() => PopulateModelRequest(ProgramId));
private void PopulateModelRequest(int programId)
{
}

第二个是在ProgramId上创建一个闭包,所以如果你想在你的方法中访问字段,就使用它而不是传递它。

这个错误是因为当你在像这样的方法中添加括号

PopulateModelRequest(int ProgramID)

你只是告诉编译器你想要调用PopulateModelRequest方法。甚至不可能调用该方法,因为您还指定了参数的类型,而它只期望参数,因此您试图做的事情基本上是错误的。

如果你想给ModelRequestCommand分配一个委托,那么你应该像第一行代码那样做:

ModelRequestCommand = new DelegateCommand(PopulateModelRequest);

我可能误解了你的问题,但在你继续之前,你最好看看一篇关于委托和事件的文章。