У меня есть вопрос относительно дизайна MVVM для С#/WPF. Я посмотрел несколько демо-приложений, но они не справлялись с моей проблемой. Мое приложение состоит из объектов, которые содержат другие объекты. Как и в отношениях между родителями и детьми.
Теперь мой вопрос:
- атрибут 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, но фактический родитель (который находится внутри ParentVM) не имеет дочерних объектов, содержащихся в объектах ChildVM. Я также не думаю, что это хорошая идея для дублирования объектов Child, поскольку это приводит к избыточности, и в моем контексте приложения также нет необходимости/возможности создавать новые дочерние объекты.
Я также подумал о следующем классе:
class ParentVM {
Parent _parent;
string Name{return _parent.Name;}
List<Child> children {get{return _parent.Children;}}
}
Однако это означало бы, что я буду непосредственно работать с Модели, если я хочу манипулировать дочерним объектом ParentVM.
С другой стороны, я мог просто оставить родительский (Model) родительский и использовать ParentVM для создания нового родителя в базе данных. Но это хороший способ справиться с этой проблемой?