Sto cercando di capire come il mio ViewModel possa gestire il salvataggio o il ripristino dello stato della pagina quando la pagina viene spostata da o verso.Gestione degli eventi OnNavigatedFrom/OnNavigatedTo nel ViewModel
La prima cosa che ho provato è stato aggiungere un comportamento EventToCommand alla pagina, ma gli eventi (OnNavigatedFrom e OnNavigatedTo) sono dichiarati protetti e EventToCommand non vede gli eventi a cui associarsi.
successivo ho pensato di provare a utilizzare la classe Messenger per passare un messaggio al ViewModel utilizzando il codice nel codice del Vista dietro:
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);
}
Ma questo sembra avere due problemi, in primo luogo sta avendo questo codice in il codice dietro la pagina. In secondo luogo, ViewModel non è in grado di rilevare la differenza tra gli eventi OnNavigatedFrom e OnNavigatedTo senza dover creare un set di classi wrapper per l'oggetto PhoneApplicationPage (vedere AGGIORNAMENTO in basso).
Qual è il modo MVVM-Light più amichevole per gestire questi eventi?
UPDATE: sono stato in grado di risolvere il secondo problema con l'invio dei messaggi come questo:
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);
}
e la loro registrazione in questo modo:
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedFrom", false, (action) => SaveState(action));
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedTo", false, (action) => RestoreState(action));
Non sono agitato con MVVM Light. Sto solo pensando al suo tempo di esecuzione. Passando da VIEW a ViewModel tramite ViewModelLocator –