Laurent BugnionのMVVM Light Toolkitを試し始めました。私は本当にそれが好きになると思いますが、私はいくつかの質問があります。MVVM Light Toolkit - RelayCommands、DelegateCommands、およびObservableObjects
私がそれらに着く前に、私がどこから来ているのか説明しましょう。私は現在、ジョシュ・スミスのMVVM FoundationとCodeplexの別のプロジェクトMVVM Toolkitの組み合わせを使用しています。 MVVM FoundationのObservableObject
とMessenger
、MVVM ToolkitのDelegateCommand
とCommandReference
を使用します。
MVVM財団とMVVM Tookitの間の唯一の本当の重複は、どちらもICommand
の実装を持っていることです:MVVM財団はRelayCommand
を持っており、MVVM TookitはDelegateCommand
を持っています。この2つのうち、DelegateCommand
はより洗練されているようです。弱い参照を使用してメモリリークを回避するCommandManagerHelper
を採用しています。そうは言って
は、ここに私の質問は以下のとおりです。
なぜMVVMライトではなく
DelegateCommand
よりもRelayCommand
を使用していますか?ICommand
の弱い参照の使用は不要か、なんらかの理由で推奨されていませんか?MVVM Lightにはなぜ
ObservableObject
がありませんか?ObservableObject
はINotifyPropertyChanged
を実装するViewModelBase
の基本的な部分ですが、ビューモデルがINotifyPropertyChanged
を実装する必要がある唯一のオブジェクトではないため、別のクラスとして持つのが非常に便利です。たとえば、Person
オブジェクトのリストにバインドするDataGridがあるとします。ユーザーがDataGridを表示しているときにPerson
のいずれかのプロパティが変更される可能性がある場合、Person
はINotifyPropertyChanged
を実装する必要があります。 (Person
がLinqToSqlのようなものを使って自動生成された場合、おそらくすでにINotifyPropertyChanged
が実装されているはずですが、私はコマンドを含める必要があるため、ビュー固有のバージョンのエンティティモデルオブジェクトを作成する必要がある場合がありますDataGridのボタン列をサポートしています)。
ありがとうございました。
P.S.ここMVVMツールキットからDelegateCommand
のコードは次のとおりです。
https://docs.google.com/document/pub?id=1ApCx5SbCfHi5fBhv8Ki3zA6j34sp2t80LQZdj89v8cU
ObservableObjectも実装されました。 – devuxer