Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用RelayCommand类_C#_Wpf_Vb.net - Fatal编程技术网

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>

我最近得到了一个实习职位,在那里我必须学习C#和VB。 为了学习这两个方面,我的主管让我重建Windows10标准计算器。我的C#版本可以工作,但我的VB版本不行。 在我的C#版本中,我使用了这个RelayCommand类:

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有吗?谢谢您的修复!我会把你的答案标为正确答案。谢谢你的修正!我会把你的答案标为正确答案。