用带参数的函数委托命令
本文关键字:命令 函数 参数 | 更新日期: 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);
我可能误解了你的问题,但在你继续之前,你最好看看一篇关于委托和事件的文章。