MVVM Light Toolkit - RelayCommands,DelegateCommands和ObservableObjects

dev*_*xer 5 wpf mvvm mvvm-foundation mvvm-light

我刚开始尝试使用Laurent Bugnion的MVVM Light Toolkit.我想我会非常喜欢它,但我有几个问题.

在我找到他们之前,让我解释一下我来自哪里.我目前使用Josh Smith的MVVM Foundation和Codeplex上另一个名为MVVM Toolkit的项目.我使用ObservableObjectMessenger从MVVM基金会DelegateCommand,并CommandReference从MVVM工具包.

MVVM Foundation和MVVM Tookit之间唯一真正的重叠是它们都有一个实现ICommand:MVVM Foundation RelayCommand和MVVM Tookit DelegateCommand.在这两个中,DelegateCommand似乎更复杂.它使用一个CommandManagerHelper使用弱引用来避免内存泄漏.

话虽如此,这是我的问题:

  1. 为什么MVVM Light使用RelayCommand而不是DelegateCommand?是否使用弱引用是ICommand不必要的还是因某些原因不推荐?

  2. 为什么ObservableObjectMVVM Light中没有?ObservableObject基本上只是该ViewModelBase实现的一部分INotifyPropertyChanged,但是作为一个单独的类非常方便,因为视图模型不是唯一需要实现的对象INotifyPropertyChanged.例如,假设您有一个绑定到Person对象列表的DataGrid .如果Person在用户查看DataGrid时可以更改任何属性,则Person需要实现INotifyPropertyChanged.(我意识到如果Person使用类似LinqToSql的东西自动生成,它可能已经实现了INotifyPropertyChanged,但是有些情况下我需要制作特定于视图的实体模型对象版本,比如说,因为我需要包含一个命令来支持DataGrid中的按钮列.)

谢谢.

PS以下是DelegateCommandMVVM Toolkit 的代码:

https://docs.google.com/document/pub?id=1ApCx5SbCfHi5fBhv8Ki3zA6j34sp2t80LQZdj89v8cU

dev*_*xer 4

看起来第一个问题提出的问题已经在最新版本中解决了:

根据MVVM Light Toolkit Codeplex 站点(在“手动引发 CanExecuteChanged 事件”下),该事件CommandManager已被完全消除。

至于Observable Object,我已将一个项目添加到Codeplex 站点上的问题跟踪器中。