Я пытаюсь выяснить способ, которым мой ViewModel обрабатывает сохранение или восстановление состояния страницы, когда страница перемещается с или на.
Первое, что я попробовал, это добавить поведение EventToCommand на страницу, но события (OnNavigatedFrom и OnNavigatedTo) объявлены защищенными, а EventToCommand не видит привязки к событиям.
Далее я подумал, что попробую использовать класс Messenger для передачи сообщения в ViewModel с использованием кода в коде просмотра позади:
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);
}
Но у этого, похоже, есть две проблемы: сначала этот код находится в коде за страницей. Во-вторых, ViewModel не может отличить события OnNavigatedFrom и OnNavigatedTo, не создавая набор классов-оболочек для объекта PhoneApplicationPage (см. UPDATE ниже).
Каков наилучший способ MVVM-Light для обработки этих событий?
UPDATE: Мне удалось решить вторую проблему, отправив такие сообщения:
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);
}
и зарегистрировать их следующим образом:
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedFrom", false, (action) => SaveState(action));
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedTo", false, (action) => RestoreState(action));