Gestion des événements OnNavigatedFrom / OnNavigatedTo dans le ViewModel

Je suis en train d'essayer de trouver un moyen pour mon ViewModel pour gérer la sauvegarde ou la restauration de la page de l'état lorsque la page est accédée à Partir de ou À.

La première chose que j'ai essayé était d'ajouter une EventToCommand comportement à la page, mais les événements (OnNavigatedFrom et OnNavigatedTo) sont déclarées protégées et la EventToCommand ne pas voir les événements à lier à.

Ensuite, j'ai pensé que je voudrais essayer à l'aide de la classe Messenger pour passer un message à ce Dernier à l'aide de code dans la Vue de code derrière:

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);
}

Mais cela semble avoir deux questions, la première est d'avoir ce code dans le code-behind de la page. Deuxièmement, le ViewModel ne peut pas faire la différence entre le OnNavigatedFrom et OnNavigatedTo des événements sans avoir à créer un jeu à l'une des classes wrapper pour la PhoneApplicationPage objet (voir la mise à JOUR ci-dessous).

Ce qui est le plus MVVM-Lumière de manière conviviale pour gérer ces événements?

Mise à JOUR:
J'ai été en mesure de résoudre le deuxième problème en Envoyant les Messages comme ceci:

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);
}

et de les Enregistrer comme ceci:

Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedFrom", false, (action) => SaveState(action));
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedTo", false, (action) => RestoreState(action));

source d'informationauteur Jeff R | 2010-07-27