在将我的视图绑定到我的单例ViewModel中定义的命令时,我是否需要注意一些特殊规则,而不是普通(非单例)ViewModel?
我所有的ViewModel除了有问题之外都表现正常。它们中的每一个都公开了两个名为HasChanges
(bool属性)和SaveChanges
(方法)的公共成员,我在我的命令的CanExecute
和Execute
函数中调用它们。
虽然所有其他视图行为正常,但当HasChanges
的值更改并在单击这些按钮时保存内容时启用/禁用按钮,实现Singleton模式的唯一ViewModel恰好调用CanExecute
仅在第一次加载视图时
之后,从该ViewModel(我的所有ViewModel实现PropertyChanged
)中引发的任意数量的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>
答案 0 :(得分:0)
由于类遵循单例模式,因此行为应该没有任何差异。任何引用单例的东西都不会关心如何限制类的构造,只关注类的实例是否存在。
问题可能在于ViewModel的PropertyChanged事件与Command上的CanExecuteChanged之间缺少正确的链接。