我对 C#/WPF 的 MVVM 设计有疑问。我看过几个演示应用程序,但它们并没有真正解决我的问题。我的应用程序由包含其他对象的对象组成。很像亲子关系。
我现在的问题是:
- children 属性是否必须是 ViewModel
- 如果是这样,我如何创建新的父对象,其中包含通过 ViewModels的现有子对象?
我有以下情况:
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 进行操作。
另一方面,我可以简单地将 (Model) Parent 留空并使用 ParentVM 在数据库中创建一个新的 Parent。但这是处理问题的好方法吗?