O no veo la solución o encuentro una trampa al usar MVVM.Una falla de MVVM con el escenario de detalles maestros
que tienen esta muestra Maestro-Detalle:
class Customer
{
int CustomerID {get;set}
string Name {get;set}
ObservableCollection<Order> Orders {get;set}
}
class Order
{
int OrderID {get;set}
int Quantity {get;set}
double Discount {get;set}
}
Asumamos en mis CustomerOrdersViewModel mis clientes ObservableCollection está obligado a la vista a través de ... = "{Binding} Clientes" y cuando el cliente está cambiado de el usuario los Pedidos relacionados se muestran en DataGrid a través de ItemsSource = "{Binding SelectedItem.Orders, ElementName = comboboxCustomer}".
Esto es posible con MVVM:
que pueda añadir un nuevo cliente simplemente (para simplificar) llamando Customers.Add(new Customer(){...});
.
Después de la adición hago esto: this.RaisePropertyChanged("Customers");
. Esto actualizará la vista e inmediatamente mostrará al Cliente en el Combobox del Cliente.
Ahora viene la parte imposible con MVVM.
puedo añadir una nueva Orden por SelectedCustomer.Orders.Add(New Order(){...});
PERO no puede plantear un evento CollectionChanged/PropertyChanged como antes con los clientes ahora a las órdenes debido a las órdenes de la propiedad no está unida a la vista a través de descriptor de acceso público .
Incluso si iba a exponer a órdenes propiedad que puede vincularse a la vista, la vista en sí se preocupa por el Maestro-Detalle de conmutación no es el modelo de vista ...
PREGUNTA
¿Cómo es posible hacer Maestro -Trabajo detallado con objetos Add/Del en Details-List y actualización inmediata en la vista?
He revisado su código y debo decir que es demasiado complicado. WPF es bueno. MVVM simplifica mucho las cosas en WinForms. Entity Framework no es posible con MVVM, es una broma si me preguntas. Intenta hacer una carga ansiosa con MVVM, entonces ya sabes a qué me refiero. Cada LOB tiene un montón de detalles maestros. Ahora sé por qué cada muestra de MVVM es una demostración estúpida y sencilla de la lista Mostrar todos los clientes ... Si conoce otra muestra MVVM Master-Detail, le agradecería un enlace :) Para aquellos interesados en ese asunto también: http://www.codeproject.com/KB/WPF/WpfNhibernateToolkit.aspx – msfanboy
MVVM se ocupa mucho de la relación entre View y ViewModel pero acerca de la relación VM to Model es totalmente silencioso. ¿Por qué? ¿Obtiene Datos de su DAL y lee clientes relacionados, pedidos, productos en 3 ObservableCollection? Este es un gran esfuerzo para crear un tipo de contexto de entityViewModel ... parece que demasiados desarrolladores han jugado con las herramientas de diseño VS2010 wpf RAD para realizar aplicaciones LOB reales que necesitan mucho más ... –
msfanboy
Ahh, pero no estoy de acuerdo aquí. Sí, el código es complicado, pero es completamente reutilizable. Usarlo es simplemente arrastrar un comportamiento a su lista maestra, y "simplemente funciona". –