我刚开始尝试使用 Laurent Bugnion 的MVVM Light Toolkit。我想我会非常喜欢它,但我有几个问题。
在我找到他们之前,让我解释一下我来自哪里。我目前结合使用 Josh Smith 的MVVM Foundation和 Codeplex 上另一个名为MVVM Toolkit的项目。我使用ObservableObject
和Messenger
来自 MVVM FoundationDelegateCommand
和CommandReference
来自 MVVM Toolkit。
MVVM Foundation 和 MVVM Tookit 之间唯一真正的重叠是它们都有一个实现ICommand
:MVVM FoundationRelayCommand
和 MVVM Tookit DelegateCommand
。在这两个中,DelegateCommand
似乎更复杂。它采用了一个CommandManagerHelper
使用弱引用来避免内存泄漏的方法。
话虽如此,这是我的问题:
为什么 MVVM Light 使用
RelayCommand
而不是DelegateCommand
?ICommand
出于某种原因,是否不必要或不推荐使用弱引用?ObservableObject
为什么MVVM Light中没有?ObservableObject
基本上只是ViewModelBase
实现的一部分INotifyPropertyChanged
,但是作为一个单独的类非常方便,因为视图模型不是唯一需要实现的对象INotifyPropertyChanged
。例如,假设您有一个绑定到Person
对象列表的 DataGrid。Person
如果在用户查看 DataGrid 时其中的任何属性可以更改,则Person
需要实现INotifyPropertyChanged
. (我意识到如果Person
是使用 LinqToSql 之类的东西自动生成的,它可能已经实现INotifyPropertyChanged
了DataGrid 中的按钮列。)
谢谢。
PS 这是DelegateCommand
来自 MVVM 工具包的代码:
https://docs.google.com/document/pub?id=1ApCx5SbCfHi5fBhv8Ki3zA6j34sp2t80LQZdj89v8cU