我有一个简单的LoginForm。体面的方式来重新Silverlight MVVM CanExecute?
这里是后台代码的样子:
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
现在,我创建了一个公开一个LoginCommand LoginViewModel。我想保持代码隐藏,另一方面,保持ViewModel UI独立。
什么应该是最干净的方式来做到这一点?
我正在寻找应用程序级别的解决方案,以便我可以制作所有控件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
“LoginCommand”的类型是什么?您至少应该提供这些信息。 – Jon 2011-03-23 00:49:34
@Jon,LoginCommand是一个简单的'DelegateCommand'(或'RelayCommand')。 – Shimmy 2011-03-23 01:12:25