C# 如何使用RelayCommand类
我最近得到了一个实习职位,在那里我必须学习C#和VB。 为了学习这两个方面,我的主管让我重建Windows10标准计算器。我的C#版本可以工作,但我的VB版本不行。 在我的C#版本中,我使用了这个RelayCommand类:C# 如何使用RelayCommand类,c#,wpf,vb.net,C#,Wpf,Vb.net,我最近得到了一个实习职位,在那里我必须学习C#和VB。 为了学习这两个方面,我的主管让我重建Windows10标准计算器。我的C#版本可以工作,但我的VB版本不行。 在我的C#版本中,我使用了这个RelayCommand类: public class RelayCommand : ICommand { private readonly Action<object> execute; private readonly Func<object, bool>
public class RelayCommand : ICommand
{
private readonly Action<object> execute;
private readonly Func<object, bool> canExecute;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
this.execute = execute;
this.canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return this.canExecute == null || this.canExecute(parameter);
}
public void Execute(object parameter)
{
this.execute(parameter);
}
}
C#中的void是一个不返回值的函数。由于我试图像在C#中那样执行此操作,因此我在VB的ViewModel中执行了以下操作:
Public类主视图模型
继承ViewModelBase
公共属性显示输入为RelayCommand
公共分新()
DisplayEnter=新的继电器命令(数字按钮命令(“5”))
端接头
公用子编号按钮命令(数字为字符串)
//剂量
端接头
末级
VisualStudio告诉我Sub不返回值。我得到了错误代码BC30491
为什么这不像C#中那样有效?RelayCommand与C版本完全不同吗?我是否需要使用函数而不是子函数?我应该返回什么值
我感谢每一个答案。请记住,我是编程和StackOverflow的新手。我已经找到了修复方法
Public Sub New()
DisplayEnter = New RelayCommand(NumberButtonCommand("5"))
End Sub
需要
Public Sub New()
DisplayEnter = New RelayCommand(AddressOf NumberButtonCommand)
End Sub
我找到了解决办法
Public Sub New()
DisplayEnter = New RelayCommand(NumberButtonCommand("5"))
End Sub
需要
Public Sub New()
DisplayEnter = New RelayCommand(AddressOf NumberButtonCommand)
End Sub
我认为你使用的修复方法不正确。构造函数的VB版本应为:
Public Sub New()
DisplayEnter = New RelayCommand(Sub(o) DisplayEnterCommand(CType(o, Numbers)))
End Sub
您必须小心编码:编译的第一个更改不一定是正确的修复。我认为您使用的修复不正确。构造函数的VB版本应为:
Public Sub New()
DisplayEnter = New RelayCommand(Sub(o) DisplayEnterCommand(CType(o, Numbers)))
End Sub
您必须小心编码:编译的第一个更改不一定是正确的修复。在VB版本中,当您调用构造函数时,实际上是在执行
NumberButtonCommand
。但这不是目的。在C#one中,您正在创建一个稍后将执行该方法的操作,DisplayEnter=newrelaycommand(o=>DisplayEnterCommand((Numbers)o))代码>您的Visual Studio是否有?在VB版本中,当您调用构造函数时,实际上正在执行NumberButtonCommand
显示Enter=New RelayCommand(NumberButtonCommand(“5”)
。但这不是目的。在C#one中,您正在创建一个稍后将执行该方法的操作,DisplayEnter=newrelaycommand(o=>DisplayEnterCommand((Numbers)o))代码>您的Visual Studio有吗?谢谢您的修复!我会把你的答案标为正确答案。谢谢你的修正!我会把你的答案标为正确答案。