3

これがすでに尋ねられている場合は申し訳ありませんが、私はこれを正しく行っていることを確認したいだけです.

10 個のプロパティを持つドミアン オブジェクトがあるとします。モデルのほぼすべてのプロパティを表示したいメイン フォームにグリッドがあります。

ドメインオブジェクトをラップしてグリッドビューに表示するビューモデルを作成しましたが、すべてのプロパティを再度公開する必要があります。ビューモデルを介してモデルに直接バインドするのは汚いと感じ、目的を少し損なうだけです。

たとえば、私はこれがあまり好きではありません。

 {Binding DomainObject.Property}

ここで、DomainObject はビュー モデルのプロパティです。

私の主な質問は、モデルをグリッドにバインドするためだけに、ビュー モデルを介してモデルのすべてのプロパティを公開する必要があるかどうかです。

編集: 追加情報として、domian オブジェクトは LINQ-To-SQL オブジェクトであるため、INotifyPropertyChanged を実装しているとは思いませんが、よくわかりません。

4

3 に答える 3

3

関係ないと言う人もいれば、関係あると言う人もいます。以下の理由から、私は後者の陣営にいます。

  • ビューモデルだけでなく、データモデルに依存するようになったため、ビューの依存関係を増やします。
  • 設計者は、データ モデルのプロパティと構造を知っている必要があります。
  • 書式設定、検証、またはそれが何であれ、間接的なレイヤーが必要であると判断した場合、(ほとんど避けられない) リファクタリングのためにより多くの作業が必要になります。
  • Thomas が指摘したように、データ モデルは多くの場合、変更通知を実装していません。

はい、もう少し手間がかかりますが、デカップリング、メンテナンスの頭痛の種、デザイナーとのコラボレーション、および正確性を減らすことには価値があると思います。

PS。このような状況が頻繁に発生する場合は、任意のデータ オブジェクトをラップし、そのプロパティを変更通知で公開する ICustomTypeDescriptor の実装を検討してください。そうすれば、書式設定や検証などの目的でプロパティを引き出す必要があると判断するまで、VM はこの汎用ラッパーを拡張できます。

于 2009-08-05T13:24:37.510 に答える
1

プロパティの変更通知が必要で、モデルが INotifyPropertyChanged を実装していない場合は、ViewModel に新しいプロパティを作成する必要があります。それ以外の場合は、モデルに直接バインドすることはおそらく大きな問題ではありません: MVVM パターンは単なるガイドラインであり、必要に応じてルールを少し曲げることができます...

于 2009-08-05T13:16:38.500 に答える
0

個人の好みの問題だと思います。ViewModel から単一のオブジェクトでモデルを公開することはまったく問題ないと思います。ViewModel で Model のすべてのプロパティを再作成すると、余分なコードが大量に発生します。

ただし、これはモデルが変更通知を実装し、データ バインディングが機能する場合にのみ機能します。

于 2009-08-05T13:22:37.073 に答える