私のモデルは、1つのメインオブジェクトで構成され、ユーザはさまざまな他のオブジェクトも追加できます。追加されたオブジェクトは、メインオブジェクト内に含まれるList<object>
に格納され、関連付けられた子オブジェクトです。データレイヤへのデータの受け渡し
したがって、プロジェクトが家の場合。ユーザはRoom
オブジェクトの数をList<Room> RoomList
に格納されている家に追加できます。次に、各Room
はFurnishings
の数が再び各部屋にList<Furnishing> FurnishingsList
を格納します追加質問はMVVMのアプローチでこれを実装する方法で持つことができますか?ユーザーが新しいオブジェクトを追加すると、ViewModel内のObservableCollection
に追加されますので、ビューが更新され、同時にVMにフックされたモデルに追加されますか?または、保存またはCommmandをコミットしてモデルに渡すまで、VMに保存しますか?
私の例では、私はさまざまなエディタを持っています(それぞれはユーザーコントロールです)。そのため、ユーザーは1つのエディタを使用して家を追加、編集、削除することができます。下のレベルでは、別のエディタを使用して各部屋を編集し、Furnishings
を追加して削除します。
だから、ユーザーが部屋を「編集」するとき。私は前記Room
を含有するEditRoomModelView
を産生する。ユーザは、その部屋の家具を追加、編集、または操作する。
各コマンドでは、上記のようにModelとModelVieeのデータを同期させることをお勧めします。または、モデルに直接変更を加えて、ViewModelに注入されたModelプロパティのゲッターだけを提供させます。この方法では、オブジェクトをモデルリストに追加してもビューは更新されません。私は本当にすべてのデータが同じ状態になるように、ModelViewとModelの両方に同時にデータを追加する必要があります。
私は何を得ているのか誰にも分かりません。
ありがとうございましたErik、新しいオブジェクトをドメインレイヤーに正常に渡して、リスト
ObservableCollectionが何であるかを知っていてもプレゼンテーションレイヤーの下に何も表示されません(つまり、それを含むWPFアセンブリへの参照はありません)。私が通常これについて通知されたGUIコンポーネントは、イベントまたはコールバックを使用しています。簡単な例として、同じサービスインスタンスを参照する2つのVMを考えてみましょう。 VM Aはルームにルームを追加するようにサービスに指示します。サービスはルームを追加するために必要な魔法を行います。終了して成功すると、VM Bが聴いているイベントが発生します。イベントが発生すると、VM Bはすべての部屋のサービスを再クエリします。 –
実際の実装では、ドメイン自体が追加を処理してイベントを発生させます。このイベントはサービスが消費してVMにリレーされます。しかし、ここのアイデアはこれです - VMはオブジェクトのためのサービス(POCO/DTO)を尋ねる方法と、更新のような操作のためにそれらを渡す方法を知っています。したがって、サービスとVMの関係は、VMがオブジェクト(Get/GetAll)を要求し、操作(Add、Editなど)を要求することです。 VMは、ドメインとの同期が外れている可能性があることをVMに伝えるサービスイベントを「OnDirty」と呼びます。 VMは、再クエリの負担があります。 –