Командный класс WPF переопределяет CanExecuteChanged-событие?

#wpf #vb.net

#wpf #vb.net

Вопрос:

На данный момент у меня есть следующий командный класс:

 Public Class SubscribeCommand
    Implements ICommand

    Private ReadOnly _vm As MainWindowViewModel

    Public Sub New(ByVal vm As MainWindowViewModel)
        _vm = vm
    End Sub

    Public Function CanExecute(ByVal parameter As Object) As Boolean Implements System.Windows.Input.ICommand.CanExecute
        Return Not String.IsNullOrEmpty(_vm.Symbol)
    End Function

    Public Event CanExecuteChanged(ByVal sender As Object, ByVal e As System.EventArgs) Implements System.Windows.Input.ICommand.CanExecuteChanged

    Public Sub Execute(ByVal parameter As Object) Implements System.Windows.Input.ICommand.Execute
        _vm.Subscribe()
    End Sub
End Class
  

В руководстве, которое я прочитал, вы должны реализовать add {} и remove {} для CanExecuteChanged-Event. Но как я могу это сделать с vb.net ?

большое спасибо..

Ответ №1:

Я не думаю, что вам требуется реализовывать элементы добавления и удаления для события CanExecuteChanged. Я почти уверен, что это будет работать просто отлично так, как у вас есть сейчас. Но если бы вы захотели по какой-то причине (например, чтобы оно соответствовало тому, что вы видите в этом сообщении на C #, например), вы бы изменили

 Public Event CanExecuteChanged(ByVal sender As Object, ByVal e As System.EventArgs)
  

Для

 Public Custom Event CanExecuteChanged As EventHandler

    AddHandler(ByVal value As EventHandler)

        CommandManager.RequestSuggested  = value

    End AddHandler

    RemoveHandler(ByVal value As EventHandler)

           CommandManager.RequestSuggested -= value

    End RemoveHandler

End Event
  

Комментарии:

1. Не уверен, чего мне здесь не хватает, но в моем проекте, когда я использую этот код, он не компилируется. Говорит вызвать RaiseEvent вместо этого.

Ответ №2:

если вы хотите использовать команды в wpf, пожалуйста, посмотрите на существующие фреймворки wpf. вы найдете по крайней мере две хорошие реализации команд: