模型更改时引发CanExecuteChanged

时间:2014-10-24 20:48:08

标签: c# .net wpf mvvm delegatecommand

在我的ViewModel我有ObservableCollectionPerson个对象(实现INotifyPropertyChanged)和SelectedPerson属性。这些绑定到我视图中的ListBox。

我的ViewModel中还有以下Prism DelegateCommand:

Private DelegateCommand _myCommand = New DelegateCommand(CanExecute)
Public DelegateCommand MyCommand {get {return _myCommand;}}

Private Bool CanExecute()
{
    Return (SelectedPerson.Age > 40);
}

每当SelectedPerson年龄发生变化时SelectedPerson更改,调用MyCommand.RaiseCanExecuteChanged的最优雅方式是什么?

SelectedPerson的setter中添加和删除属性更改的处理程序对我来说似乎有些混乱。

1 个答案:

答案 0 :(得分:1)

  

在SelectedPerson的setter中添加和删除属性更改处理程序对我来说似乎有点乱。

我是怎么做的,而且我不确定什么是更清洁的选择。如果命令状态取决于子属性,则需要观察以某种方式的更改。但是,请注意取消订阅,否则如果Person超过您的视图模型,则可能会导致内存泄漏。如果您无法保证取消订阅,则PropertyChangedEventManager和弱事件处理程序可以提供帮助。

为了保持清洁,我通常只有一个侦听任何子属性更改的处理程序,它调用RequeryCommands方法(也直接由视图模型方法调用),后者又调用{{1} } all 我视图中的命令。