Tengo una aplicación que necesita abrir un cuadro de diálogo desde un botón donde el usuario ingresa cierta información.Abrir el cuadro de diálogo en WPF MVVM
Por el momento lo hago así (que funciona muy bien)
- El clic de botón genera un comando en el modelo de vista.
- El ViewModel provoca un evento que el controlador escucha.
- El controlador trabaja en los detalles de la nueva ventana (es decir, Ver, ViewModel & modelo) y la abre (ShowDialog)
- Cuando se cierra la ventana del controlador suma el resultado a los EventArgs y vuelve al modelo de vista
- El ViewModel pasa la información al Modelo.
Hay muchos pasos, pero todos tienen sentido y no hay mucho tipeo.
El código es el siguiente (la ventana de pregunta por el nombre del usuario)
modelo de vista:
AskUserNameCommand = DelegateCommand(AskUserNameExecute);
...
public event EventHandler<AskUserEventArgs> AskUserName;
void AskUserNameExecute(object arg) {
var e = new AskUserNameEventArgs();
AskUserName(this, e);
mModel.SetUserName(e.UserName);
}
controlador:
mViewModel.AskUserName += (sender,e) => {
var view = container.Resolve<IAskUserNameView>();
var model = container.Resolve<IAskUserNameModel>();
var viewmodel = container.Resolve<IAskUserNameViewModel>(view, model);
if (dlg.ShowDialog() ?? false)
e.UserName = model.UserName;
}
Mi pregunta es cómo la comunicación horizontal trabaja en el Patrón MVVM. De alguna manera, parece incorrecto dejar que el controlador se involucre en la transferencia de datos entre los modelos.
He examinado el patrón del mediador para permitir que los modelos se comuniquen directamente. No me gusta esa idea ya que hace que el modelo dependa de los detalles de las implementaciones de la GUI. (es decir, si el cuadro de diálogo se reemplaza por un cuadro de texto, el modelo debe cambiar)
¿Tuvo un vistazo a las siguientes preguntas http: //stackoverflow.com/questions/454868/handling-dialogs-in-wpf-with-mvvm http://stackoverflow.com/questions/ 1667888/wpf-mvvm-dialog-example http: // stackoverflow.com/preguntas/1792814/uso-MVVM-cimientos-messenger-a-show-diálogo – Guge
Sí miré pero todos ellos recomiendan un patrón de difusión para resolver algo que es un caso al otro. – adrianm
'El clic del botón genera un comando en ViewModel.', ¿Qué significa esto? 'The ViewModel plantea un evento que el controlador escucha', ¿qué controlador ?! –