Estoy intentando encontrar una forma de que mi ViewModel gestione el guardado o restablezca el estado de la página cuando se navega desde o hasta la página.Gestionar los eventos OnNavigatedFrom/OnNavigatedTo en ViewModel
Lo primero que probé fue agregar un comportamiento de EventToCommand a la página, pero los eventos (OnNavigatedFrom y OnNavigatedTo) se declararon protegidos y EventToCommand no ve los eventos para vincular.
siguiente pensé que iba a tratar de usar la clase Messenger para pasar un mensaje al modelo de vista utilizando el código en el código de la vista atrás:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Send<PhoneApplicationPage>(this);
base.OnNavigatedFrom(e);
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Send<PhoneApplicationPage>(this);
base.OnNavigatedTo(e);
}
Pero esto parece tener dos problemas, primero es tener este código en el código detrás de la página. En segundo lugar, ViewModel no puede diferenciar entre los eventos OnNavigatedFrom y OnNavigatedTo sin tener que crear un conjunto de clases contenedoras para el objeto PhoneApplicationPage (ver UPDATE a continuación).
¿Cuál es la forma más amigable con MVVM-Light de manejar estos eventos?
ACTUALIZACIÓN: que fue capaz de resolver el segundo problema mediante el envío de los mensajes como este:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Send<PhoneApplicationPage>(this,"NavigatedFrom");
base.OnNavigatedFrom(e);
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Send<PhoneApplicationPage>(this, "NavigatedTo");
base.OnNavigatedTo(e);
}
y registrarlas como esto:
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedFrom", false, (action) => SaveState(action));
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedTo", false, (action) => RestoreState(action));
No estoy de acuerdo con MVVM Light. Solo estoy pensando en el tiempo de ejecución. Pasando de VIEW a ViewModel a ViewModelLocator –