5

Laurent Bugnion のMVVM Light Toolkitの実験を始めたところです。とても気に入ると思いますが、いくつか質問があります。

彼らの話をする前に、私がどこから来たのか説明させてください。私は現在、Josh Smith のMVVM Foundationと、 MVVM Toolkitという Codeplex 上の別のプロジェクトを組み合わせて使用​​しています。私はMVVM Foundation とMVVM Toolkitを使用ObservableObjectしています。MessengerDelegateCommandCommandReference

ICommandMVVM Foundation と MVVM Tookit の唯一の実際の重複は、MVVM Foundationと MVVM Tookit の両方の実装があることRelayCommandですDelegateCommand。これら 2 つのうち、DelegateCommandより洗練されているように見えます。CommandManagerHelper弱参照を使用してメモリ リークを回避する を採用しています。

そうは言っても、ここに私の質問があります:

  1. RelayCommandMVVM Light がではなく を使用するのはなぜDelegateCommandですか? 弱い参照の使用は、ICommand何らかの理由で不要または推奨されていませんか?

  2. ObservableObjectMVVM Lightにないのはなぜですか? . ObservableObject_ _ _ たとえば、オブジェクトのリストにバインドする DataGrid があるとします。ユーザーが DataGrid を表示しているときに のプロパティのいずれかが変更される可能性がある場合は、を実装する必要があります。( LinqToSql のようなものを使用して自動生成された場合、おそらく既に実装されていることを認識していますが、エンティティ モデル オブジェクトのビュー固有のバージョンを作成する必要がある場合があります。たとえば、サポートするコマンドを含める必要があるためです。 DataGrid 内のボタン列)。ViewModelBaseINotifyPropertyChangedINotifyPropertyChangedPersonPersonPersonINotifyPropertyChangedPersonINotifyPropertyChanged

ありがとう。

PS DelegateCommandMVVM Toolkit のコードは次のとおりです。

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

4

3 に答える 3

4

最初の質問で提起された問題は、最新のビルドで解決されているようです。

MVVM Light Toolkit Codeplex サイト(「CanExecuteChanged イベントを手動で発生させる」の下) によると、CommandManager完全に削除されました。

に関しては、Codeplex サイトの Issue Tracker にアイテムをObservable Object追加しました。

于 2011-03-04T21:11:53.113 に答える
1

Catelも検討できます。探しているもの (INotifyPropertyChanged、IDataErrorInfo などを実装するオブジェクト) を正確にサポートする DataObject (ジェネリックと非ジェネリックの両方) をサポートします。次に、ViewModelBase は非常に強力な DataObjectBase クラスから派生するため、データ オブジェクトには DataObjectBase を、ビュー モデルには ViewModelBase を使用できます。

また、ビュー モデルで InterestedIn 属性を使用するだけで別のビュー モデルの変更通知を受け取ることができるため、メッセンジャーを作成する手間も省けます。

于 2011-01-04T07:44:57.080 に答える
0

あなたの両方の質問は、ビジネス ロジックを定義するためにビュー モデルの概念以上のものを使用することを好むことを強く示唆しています。

は、View Model とはDelegateCommandのクラスを定義します。View Model とはのクラスのインスタンスです。これはルールではなく、現時点での個人的な好みです。ビュー モデルは、ビジュアルに関連するビジネス ロジックのコンテナーとして十分です。これは、MVVM Light に対する私の好みを裏切る可能性があります。ObservableObject

DataGrid の例で何が起こっているのか、よくわかりません。私が言えることは、DataGrid はあまり柔軟ではないということです。ただし、WPF では、DataGridTemplateColumnビュー モデルをビュー (ユーザー コントロールなど) に宣言的にバインドできます。したがって、おそらくこれは理にかなっています。

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate DataView="{x:Type m:YourViewModelForButton}">
        <v:YourViewWithButton/>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
于 2011-01-04T04:47:21.307 に答える