Tengo una pregunta sobre el diseño de MVVM para C#/WPF. He echado un vistazo a varias aplicaciones de demostración, pero realmente no manejaron mi problema. Mi aplicación consiste en objetos que contienen otros objetos. Muy parecido a una relación entre padres e hijos.Cómo presentar una colección de modelos (de vistas) en un modelo de vista
Mi pregunta ahora es:
- hace a los niños atributo tiene que ser un modelo de vista
- y si es así, ¿cómo puedo crear nuevos objetos principales que contienen los existente objetos secundarios a través de ViewModels?
tengo algo como el siguiente escenario:
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);
}
El problema aquí es, que el ParentVM contiene el ChildVM, pero el padre real (que se encuentra dentro de la ParentVM) no tiene Niño objetos contenidos por los objetos ChildVM. Tampoco creo que sea una buena idea duplicar los objetos Child, ya que conduce a la redundancia y en mi contexto de aplicación tampoco hay necesidad/posibilidad de crear nuevos objetos Child.
También pensé en el diseño de la clase siguiente:
class ParentVM {
Parent _parent;
string Name{return _parent.Name;}
List<Child> children {get{return _parent.Children;}}
}
Sin embargo, esto significaría que habría operar directamente en el modelo si quiero manipular objetos secundarios de los ParentVM.
Por otro lado, simplemente podría dejar el (Modelo) Parent en blanco y usar ParentVM para crear un nuevo Parent en la base de datos. Pero, ¿es esta una buena forma de manejar el problema?
Hola, Torsten (@Torsten) y admito por completo que esto es parcial, pero ya que marcó su propia respuesta como la aceptada usando lo mismo que ya he mencionado en mi respuesta, y también proporcionó el por qué, cambiando mi mente por lo que obtener el aceptar? No puede darse puntos de todos modos y como puede ver, otros aprecian mi descripción aquí explicando por qué está bien exponer el modelo de ViewModel. ¡Gracias! – MarqueIV
@MarqueIV Creo que marqué mi respuesta como la solución ya que tu respuesta llegó más tarde que la mía. También veo que yo misma cambié tu respuesta, así que aquí tienes. – Torsten
Gracias! ¡Muy apreciado! :) – MarqueIV