我正在使用普通RelayCommand类的一个版本,并尝试传递命令参数但没有成功。我收到以下错误:
Error 29 Method 'Private Sub KeyPadPressExecute(param As Object)' does not have a signature compatible with delegate 'Delegate Sub Action()'.
我已经查看了使用命令参数的许多示例,但我无法理解它们。我不明白我应该从哪里获取参数将传递给KeyPadPressExecute()
。
以下是相关代码:
Private Sub KeyPadPressExecute(param As Object)
Debug.Print(param.ToString)
End Sub
Private Function CanKeyPadPressExecute() As Boolean
Return True
End Function
Public ReadOnly Property KeyPadPress() As ICommand
Get 'Error occurs on next line
Return New RelayCommand(AddressOf KeyPadPressExecute, AddressOf CanKeyPadPressExecute)
End Get
End Property
我的XAML是什么样的:
<Button Command="{Binding KeyPadPress}" CommandParameter="1" Width="84"></Button>
我正在使用VS 2012并以.NET 4.5为目标。
注意:我的原帖说我使用的是MicroMVVM。对项目进行更仔细的检查表明,名为MicroMVVM的程序集与在codeplex上托管的MicroMVVM框架无关。这个项目是由其他人启动的,因此引起了混乱。
答案 0 :(得分:2)
从GitHub看到的RelayCommand
实现,可以看出该类有效地隐藏并吞下了命令参数。也许您应该尝试使用该类的通用版本:RelayCommand(Of T)
。运行时异常非常清楚: MicroMVVM 类的构造函数之间存在不匹配,仅采用钝 Sub Action()
委托;和你的命令的执行处理程序,采用object
参数。
NB :请原谅我的错误VB
,这不是我的母语。
更新:我看到MicroMVVM托管在CodePlex上,但那里没有RelayCommand
类(显然被更聪明的DelegateCommand
类所取代)。 GitHub上可能不相关项目的链接仍然是其作为示例和信息来源的目的。欢迎提出意见。