Estoy trabajando con una aplicación WPF y utilizando mi propia arquitectura que se parece mucho a una M-V-VM/MVC. Tengo controladores para cada una de las vistas, y tengo ViewModels que están vinculados a las Vistas.¿Actualizar DataContext para vistas en WPF?
Por ejemplo, tengo una ToolBarView que tiene un ToolBarViewModel correspondiente, y un controlador ToolBar.
Estoy usando notificaciones para actualizar todas las vistas para que no necesiten hacerse referencia entre ellas, pero eso no es relevante para mi pregunta.
Cada una de las Vistas está esperando a que un evento se dispare en su controlador cuando el modelo se ha actualizado. En el ToolBarView esto se parece a lo siguiente.
/*In Constructor in ToolbarView*/
Controller.Updated += UpdateView
/*Event Handler in ToolbarView*/
private void Updateview(object sender,EventArgs e)
{
DataContext = Controller.Model;
//Other Updating if needed
}
Si no es evidente, lo que el código está haciendo es decir que cuando el controlador activa el evento actualizado, para invocar la UpdateView (object sender, EventArgs e).
El problema que estoy experimentando es que la primera vez que se invoca UpdateView(), todo funciona bien, pero cuando se invoca por segunda vez, el DataContext parece estar aún vinculado al Controller.Model original .
Parece como si tuviera que liberar el DataContext o actualizarlo para que se vincule con el Modelo todo el tiempo.
El controlador está realizando operaciones en el modelo y, por lo tanto, cuando se invoca UpdateView(), debe mostrar los valores recientemente asignados en ese modelo.
¿Hay alguna manera de actualizar el DataContext, o hay alguna otra manera de hacerlo?
De hecho estoy implementando INotifyPropertyChanged, pero en el caso de que lo esté usando, no ayudaría a actualizar el DataContext. Lo que haría es si el valor que estaba inicialmente vinculado a DataContext se modificó, lo mostraría, pero está en lo correcto en esa configuración que funcionó el DataContext para null. Desafortunadamente, WPF no ofrece una solución para "vaciar" o "actualizar" el DataContext como WinForms y .Net, así que eso tendrá que hacer. ¡Gracias! +1 por la idea – TheJediCowboy