C#> VB转换,RelayCommand的行为不同

Nib*_*Pig 3 c# vb.net

    [Visual C#]
    public ICommand MyCommand
    {
        get
        {
            if (this.myCommand == null)
            {
                this.myCommand = new RelayCommand(this.ShowMyCommand);
            }

            return this.myCommand;
        }
    }

    private void ShowMyCommand(object param)
    {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

此代码工作正常,但当我将其转换为Visual Basic时:

[Visual Basic]
Private _myCommand As RelayCommand
Public ReadOnly Property MyCommand As ICommand
    Get
        If Me._myCommand Is Nothing Then
            Me._myCommand = New RelayCommand(Me.ShowMyCommand)
        End If

        Return Me._myCommand
    End Get
End Property

Private Sub ShowMyCommand(ByVal param As Object)

    ...

End Sub
Run Code Online (Sandbox Code Playgroud)

我收到错误:

错误3未为'Private Sub ShowMyCommand(param As Object)'的参数'param'指定参数.

有任何想法吗?我只是盲目转换所以我不明白该项目的作用,我只是转换它.

ang*_*son 5

对于VB来说,我有点茫然,但根据我所知,你需要在方法名前加上关键字AddressOf,以便它可以作为事件的方法组使用.

以下行:

Me._myCommand = New RelayCommand(Me.ShowMyCommand)
Run Code Online (Sandbox Code Playgroud)

需要写成:

Me._myCommand = New RelayCommand(AddressOf Me.ShowMyCommand)
Run Code Online (Sandbox Code Playgroud)

错误消息是因为编译器正在尝试编译对该方法的调用,因此缺少其参数的参数.