在将我的视图绑定到我的单例 ViewModel 中定义的命令时,我必须注意一些特殊规则,而不是普通(非单例)ViewModels?
除了有问题的 ViewModel 之外,我所有的 ViewModel 都表现正常。它们中的每一个都公开了两个名为HasChanges
(bool property) 和SaveChanges
(method) 的公共成员,我在命令的CanExecute
和Execute
函数中调用它们。
虽然所有其他视图都正常运行,在值HasChanges
更改时启用/禁用按钮并在单击这些按钮时保存内容,但唯一实现单例模式的 ViewModel 恰好CanExecute
仅在第一次加载视图时调用。
之后,PropertyChanged
从该 ViewModel(我的所有 ViewModel 实现INotifyPropertyChanged
)中引发的任何数量的事件都不会影响按钮的禁用状态。
想知道我在这里缺少什么。
这是单例模型视图:
Public NotInheritable Class MyViewModel
Private Shared ReadOnly mInstance As New CommonListsViewModel
Public Shared ReadOnly Property Instance() As CommonListsViewModel
Get
Return mInstance
End Get
End Property
Public Property SaveChangesCommand As ICommand
Private Sub New()
SaveChangesCommand = New Commands.SaveChangesCommand()
End Sub
Public ReadOnly Property HasChanges As Boolean Implements IEditorViewModel.HasChanges
Get
...
End Get
End Property
Public Function SaveChanges() As Boolean Implements IEditorViewModel.SaveChanges
...
End Function
End Class
这是命令:
Friend Class SaveChangesCommand
Inherits CommandBase
Public Overrides Function CanExecute(parameter As Object) As Boolean
Return MyViewModel.Instance.HasChanges
End Function
Public Overrides Sub Execute(parameter As Object)
MyViewModel.Instance.SaveChanges()
End Sub
End Class
这是我的观点:
<Grid DataContext="{x:Static local:CommonListsViewModel.Instance}">
<Button Command="{Binding SaveChangesCommand}">
</Grid>