質問

Laurent Bugnion'sの実験を始めたばかりです MVVMライトツールキット. 。私はそれが本当に好きになると思いますが、いくつか質問があります。

私が彼らに到達する前に、私がどこから来たのかを説明させてください。私は現在、ジョシュ・スミスの組み合わせを使用しています MVVM Foundation CodePlexの別のプロジェクトが呼び出されました MVVMツールキット. 。私が使う ObservableObjectMessenger MVVM Foundationから DelegateCommandCommandReference MVVMツールキットから。

MVVM FoundationとMVVM TakeTの間の唯一の実際の重複は、両方ともの実装を持っていることです ICommand: :MVVM Foundationがあります RelayCommand そして、MVVM Tockitは持っています DelegateCommand. 。これら2つのうち、 DelegateCommand より洗練されているようです。 aを使用します CommandManagerHelper これは、メモリリークを回避するために弱い参照を使用します。

とはいえ、ここに私の質問があります:

  1. なぜMVVMが光を使用するのか RelayCommand それよりも DelegateCommand? anでの弱い参照の使用です ICommand 何らかの理由で不要または推奨されていませんか?

  2. なぜいないのですか ObservableObject MVVMライトで? ObservableObject 基本的にの一部です ViewModelBase それは実装しています INotifyPropertyChanged, 、しかし、ビューモデルが実装する必要があるオブジェクトだけではないため、別のクラスとして持つことは非常に便利です INotifyPropertyChanged. 。たとえば、のリストにバインドするデータグリッドがあるとしましょう Person オブジェクト。のいずれかのプロパティの場合 Person ユーザーがDatagridを表示している間に変更できます。 Person 実装する必要があります INotifyPropertyChanged. 。 (私はそれを理解しています Person linqtosqlのようなものを使用して自動生成されている場合、おそらくすでに実装されます INotifyPropertyChanged, 、しかし、Entity Modelオブジェクトのビュー固有のバージョンを作成する必要がある場合があります。たとえば、Datagridでボタン列をサポートするコマンドを含める必要があるためです。)

ありがとう。

PSここにコードがあります DelegateCommand MVVMツールキットから:

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

役に立ちましたか?

解決

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

によると MVVMライトツールキットCODEPLEXサイト (「Canexectechangedイベントの手動での上昇」の下)、 CommandManager 完全に排除されました。

はどうかと言うと Observable Object, 、 私が追加しました 問題トラッカーのアイテム CodePlexサイトで。

他のヒント

あなたも考慮することができます カテル. 。これは、探しているもの(inotifyPropertyChanged、idataerrorinfoなどを実装するオブジェクト)を正確にサポートするデータオブジェクト(汎用と非genericの両方)をサポートします。次に、ViewModelbaseは非常に強力なDataObjectBaseクラスから派生しているため、データオブジェクトのDataObjectBaseを使用し、ViewModelbaseをビューモデルに使用できます。

また、ビューモデルでAcconestIn属性を使用して別のビューモデルの変更通知を受け取るだけであるため、メッセンジャーの作成からも節約できます。

あなたの質問はどちらも私に何かを使うことを好むことを強く示唆しています もっと ビューモデルの概念よりも、ビジネスロジックを定義します。

DelegateCommand aを定義します 分ける ビューモデル以外のクラス。 ObservableObject aのインスタンスです 分ける ビューモデル以外のクラス。これはルールではなく、瞬間の個人的な好みです。ビューモデルは、ビジュアルに関連するビジネスロジックのコンテナとして十分です。これは、MVVMライトに対する私の好みを裏切るかもしれません---私は現時点では不足していないと思います。

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

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate DataView="{x:Type m:YourViewModelForButton}">
        <v:YourViewWithButton/>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top