MVVMを理解しているので、ModelXクラスのXViewModelは、このクラスを他のすべてのクラスからアクセスしないようにして、モデルに対するすべての変更をXViewModelが認識するようにします。しかし、私は解決できない問題があります。MVVMのパターンとViewModelからModelへのアクセス
私はいくつかのクラスを次のように想像しています: ProjectModel、UserModel、およびGroupModel。 ProjectModelにはUserModelのリストが含まれ、リストにはUserModelのリストであるGroupModelが含まれます。
これらすべてのクラスについては、ViewModels: ProjectViewModel、UserViewModel、GroupViewModelが存在します。 ProjectViewModelは、モデルのすべてのリストをObservableCollectionにラップします(変更が必要な場合)。そうでない場合はReadOnlyCollectionで行います。私の場合はObservableCollectionです。
ここで、プロジェクトにグループを追加したいとします。
public GroupModel(UserModel user1, UserModel user2){}
をしかし残念ながら、GroupViewModelはUserViewModelのフィールド_userへのアクセス何を持っていない。だから私は今GroupViewModelのコンストラクタはGroupModelのコンストラクタを呼び出すことによって、そのフィールド_groupModelを作成する必要があります
のようなものを呼び出しますしたがって、独自のフィールド_groupModelを作成することはできません。
私はこの問題に一度は直面していましたが、Googleでこれ以上の問題は発生しませんでしたが、ここではこれに対する良い解決策を見つけることができません。私が考えた
Possibilieソリューション:
- ごとのViewModelクラスでそのためのプロパティを保持することで、モデルへのアクセスを与えます。しかしこれは、モデルを不正なアクセスから隠すという考え方と矛盾しています。
- UserViewModelで "public static GroupModel CreateGroup()"を実装します。これはモデルにアクセスできるためです。しかし、これは少し汚れて聞こえる。
この問題をどのように解決しましたか?私はMVVPパターンで何かを逃していますか?
この例ではUserViewModelsをGroupに渡していますが、これはモデルであると想定しています。これは私には見えません。 – cadrell0
私はこれについて考えていましたが、私の場合はこれで問題は解決しますが、一般的ではありません。それは保証されていない、私は常にモデルにアクセスする必要があります。おそらく、モデルは外部ライブラリの一部であり、データバインディングを動作させるためには、モデルをVMにラップする必要があります。その場合、私のGroupModelはコンストラクタ(UserViewModel、UserViewModel)、(UserModel、UserModel) – 0xBADF00D