martes, 18 de diciembre de 2012

Recargar un ListView navegando con un Back()

Primero un Disclamer: lo que estoy haciendo no es el modo correcto. Me he saltado, por causas justificadas, el uso de MVVM y lo he hecho al estilo “mero macho”: en code behind.

Tengo una página de listado de usuarios, cuando pulso en el botón más me voy a un formulario de alta de un nuevo usuario. Pero, como accedo a esa página desde varios sitios, utilizo GoBack() para volver a la página anterior en el historial de navegación.

image
Listado inicial

image
Alta de un nuevo usuario

El problema viene cuando acabo de añadir un usuario y vuelvo a la página de la Lista de Usuarios, que no se me ha actualizado, ya que tira de caché.

image
Ups, no se actualiza

Dándole vueltas he llegado a una solución imperfecta, pero que me vale. La asignación del datocontext de la página en vez de hacerlo en el constructor de la página, lo realizo en el evento de carga.

    public partial class ListadoUsuarios :Page
  
{
      
public ListadoUsuarios()
        {
            InitializeComponent();
            Loaded += ListadoUsuarios_Loaded;
        }

      
void ListadoUsuarios_Loaded(object sender,RoutedEventArgs e)
        {
          
VMLocator locator =newVMLocator();
          
this.DataContext = locator.ListadoUsuariosViewModel;
        }

   
}

De esta forma me aseguro, llegue como llegue a esta página, que se me recargue el Listado de Usuarios.

image
Ahora si que se actualiza siempre.

P.D. Olvídate de la clase VMLocator, lo importante es cómo creas el ViewModel y la propiedad pública que utilices para el DataContext de la página.

No hay comentarios: