c# - 使用带参数的函数委托(delegate)命令

标签 c#

ModelRequestCommand = new DelegateCommand(PopulateModelRequest);

没有错误并且很好,但我想将参数 (int ProgramID) 传递到填充模型请求中。 ProgramID 由

定义
this.ProgramId = ProgramID;

当我尝试时出现错误

ModelRequestCommand = new DelegateCommand(PopulateModelRequest(int ProgramID);

我该怎么做?

一个按钮绑定(bind)到 WPF 中的 ModelRequestCommand

最佳答案

看起来您试图在函数调用期间声明一个参数。然后您尝试将该调用的结果(应该是 void )传递给期望 Action<object> 的构造函数或者可能是 Action代表。你就是不能那样做。

同样,ICommand接口(interface) Execute方法(实际上是您正在实现的方法)如下所示:

void Execute(object parameter)

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

要修复它,要么通过 ProgramIDCommandParameter并这样做:

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

或者类似的东西

new DelegateCommand(() => PopulateModelRequest(ProgramId));

private void PopulateModelRequest(int programId)
{
}

第二个是在 ProgramId 上创建一个闭包,因此如果您无论如何都可以在您的方法中访问该字段,只需使用它而不是将其传入。

关于c# - 使用带参数的函数委托(delegate)命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39024584/

相关文章:

c# - 如何列出所有月份名称,例如组合?

c# - CreateDelegate 拒绝为实例方法创建委托(delegate)

c# - 我如何覆盖 :before propertie-value in/from my Html file

c# - 使 ListBox 项目具有与项目文本不同的值

c# - 从 C# 访问 Win32 C/C++ 结构成员

c# - 如何在像素艺术编辑器中优化绘制区域

c# - 在 Sound forge 中编写脚本

c# - 使用 System.Threading.Tasks.Task<Stream> 而不是 Stream

c# - 继承类并调用隐藏的基类构造函数

c# - MsiInstallProduct() 启动 msiexe.exe 但处于 32 位模式?