4

私のWPFMVVMアプリケーションでは、私のモデルはモデルオブジェクトの複雑なツリーであり、実行時に絶えず変化します。モデルインスタンスは実行時に出入りし、ツリー内での位置を変更し、もちろん多くのプロパティを変更します。マイビューは、そのツリーをほぼ1対1で視覚的に表現したものです。すべてのモデルインスタンスは、ケースの80%で、ツリー内のノードでもあります。

私の質問は、これを中心にViewModelをどのように設計するかということです。私の問題は、それぞれが非常に多くのプロパティを持つ非常に多くの異なるモデルタイプがあることです。MVVMを正しく理解している場合、ビューはモデルと直接通信しないはずです。つまり、モデルタイプごとにViewModelタイプを作成し、モデルタイプの各プロパティをViewModelに再ラップする必要があります。

また、ViewModelは、モデルのpropertychangesに「バインド」して、ビューに渡す必要があります(wpf datatbindingを使用)。新しく表示される各モデルのViewModelインスタンスを作成して導入するファクトリが必要であり、対応するモデルが消えたときに各ViewModelインスタンスを破棄する必要があります。作成したすべてのインスタンスを追跡することになります。この二重の折り返しが原因で、どれだけの膨張コードが生成されるかは信じられないほどです。これは本当に良いアプローチですか?各エンティティと各プロパティは2回存在し、モデルとビューの同期を維持するための追加のコードがたくさんあります。これをどのように処理しますか?これを解決するためのより賢い方法はありますか?

誰かが私よりも優れているこのためのリファレンス/サンプル実装を持っていますか?

4

1 に答える 1

9

この道をたどると、パラダイムの罠にぶつかるかもしれないと思います。MVVMは、WPFの世界での開発を簡素化するパターンにすぎません。そうでない場合は、使用したり、アプローチを修正したりしないでください。「MVVMの使用」フィールドをチェックするためだけに時間の80%を費やすことはありません。

さて、あなたの質問に戻りましょう。私が間違っている場合は訂正してください。ただし、MVVMを反対方向から見ているようです。ModelとViewModelを1対1で対応させる必要はありませ。通常、最初にビューに基づいてViewModelを作成し、次にモデルに基づいて作成します。

通常、グラフィックデザイナーの画面モックアップを見て、対応するViewModelを作成します。これは、モデルから必要なすべてのフィールドを取得し、それらをラップ/変更/フォーマット/結合して、ビューの開発を可能な限り簡単にします。

ビューはモデルのほぼ1対1の視覚的表現であるとおっしゃいました。この場合、モデルツリーのルートオブジェクトを公開する非常に単純なViewModelを作成し、そのプロパティを介してViewにモデルを直接消費させることが理にかなっている場合があります。次に、ビューのカスタマイズやコマンド処理が必要な場合は、それをViewModelに委任できます。

非常に漠然とした答えでごめんなさい。もっと具体的な質問をすれば、混乱を払拭できるかもしれません:) .. ..

于 2009-10-23T14:50:08.777 に答える