У меня простая LoginForm.
Вот как выглядит код:
Private Sub btnLogin_Click(sender As Object, e As RoutedEventArgs) _
Handles btnLogin.Click
If Me.loginForm.ValidateItem() Then
'Do the actual login - (calling VM command)
DirectCast(Me.DataContext, LoginViewModel).LoginCommand.Execute()
End If
End Sub
Теперь я создал LoginViewModel, который представляет LoginCommand. Я хотел бы сохранить чистоту кода, а с другой стороны, оставить независимым интерфейс ViewModel.
Какой должен быть самый чистый способ сделать это?
Я ищу решение на уровне приложения, чтобы я мог сделать все элементы управления UpdateSourceTrigger = PropertyChanged или другой обходной путь для запроса команды CanExecute при попытке щелчка.
Обновление после ответа Джона:
Так откуда я должен вызывать этот метод, должен ли он быть Login
?
Private m_LoginCommand As ICommand
Public ReadOnly Property LoginCommand() As ICommand
Get
If m_LoginCommand Is Nothing Then m_LoginCommand =
New DelegateCommand(AddressOf Login, AddressOf CanLogin)
Return m_LoginCommand
End Get
End Property
Private Function CanLogin() As Boolean
Return Not IsLoggingIn
End Function
Private Sub Login()
DirectCast(LoginCommand, DelegateCommand).RaiseCanExecuteChanged()
If Not CanLogin() Then Exit Sub
'Do login
End Sub