Я пытаюсь найти способ, с помощью которого моя ViewModel может сохранять или восстанавливать состояние страницы при переходе по странице От или К.
Первое, что я попробовал, - добавить поведение EventToCommand кстраницы, но события (OnNavigatedFrom и OnNavigatedTo) объявлены защищенными, а EventToCommand не видит события для привязки.
Затем я подумал, что попробую использовать класс Messenger для передачи сообщения в ViewModel с использованием кодав коде View:
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 (см. ОБНОВЛЕНИЕ ниже).
Какой самый удобный для MVVM-Light способобрабатывать эти события?
ОБНОВЛЕНИЕ: мне удалось решить вторую проблему, отправив сообщения следующим образом:
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));