dev*_*xer 5 wpf mvvm mvvm-foundation mvvm-light
我刚开始尝试使用Laurent Bugnion的MVVM Light Toolkit.我想我会非常喜欢它,但我有几个问题.
在我找到他们之前,让我解释一下我来自哪里.我目前使用Josh Smith的MVVM Foundation和Codeplex上另一个名为MVVM Toolkit的项目.我使用ObservableObject
并Messenger
从MVVM基金会DelegateCommand
,并CommandReference
从MVVM工具包.
MVVM Foundation和MVVM Tookit之间唯一真正的重叠是它们都有一个实现ICommand
:MVVM Foundation RelayCommand
和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 Toolkit 的代码:
https://docs.google.com/document/pub?id=1ApCx5SbCfHi5fBhv8Ki3zA6j34sp2t80LQZdj89v8cU
看起来第一个问题提出的问题已经在最新版本中解决了:
根据MVVM Light Toolkit Codeplex 站点(在“手动引发 CanExecuteChanged 事件”下),该事件CommandManager
已被完全消除。
至于Observable Object
,我已将一个项目添加到Codeplex 站点上的问题跟踪器中。
归档时间: |
|
查看次数: |
5865 次 |
最近记录: |