C#/WPF の MVVM 設計について質問があります。いくつかのデモ アプリケーションを見てきましたが、実際には問題を解決できませんでした。私のアプリケーションは、他のオブジェクトを含むオブジェクトで構成されています。親子関係によく似ています。
私の質問は次のとおりです。
- children 属性は ViewModel である必要がありますか?
- その場合、 ViewModels を介して既存の子オブジェクトを含む新しい親オブジェクトを作成するにはどうすればよいですか?
次のシナリオのような sth があります。
class Child {
string Name;
}
class ChildVM {
Child _child;
string Name{return _child.Name;}
}
class Parent {
string Name;
List<Child> children;
}
class ParentVM{
Parent _parent;
string Name{return _parent.Name;}
List<ChildVM> children {get;set;}
ParentVM(Parent p){_parent = p;}
}
void CreateANewParent(){
List<ChildVM> children = new List<ChildVM>(){new ChildVM(new Child()),...};
ParentVM parent = new ParentVM(new Parent());
foreach(ChildVM child in children)
parent.children.Add(child);
}
ここでの問題は、ParentVM に ChildVM が含まれているが、実際の Parent (ParentVM の内部にある) には ChildVM オブジェクトに含まれる Child オブジェクトがないことです。また、子オブジェクトを複製することは良い考えではないと思います。冗長性につながり、アプリケーションのコンテキストでは、新しい子オブジェクトを作成する必要も可能性もないためです。
また、次のクラス設計についても考えました。
class ParentVM {
Parent _parent;
string Name{return _parent.Name;}
List<Child> children {get{return _parent.Children;}}
}
ただし、これは、ParentVM の Child オブジェクトを操作したい場合、Model を直接操作することを意味します。
一方、(モデル) 親を空白のままにして、ParentVM を使用してデータベースに新しい親を作成することもできます。しかし、これは問題を処理する良い方法ですか?