Я пытаюсь выяснить путь к своему 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 (см. ОБНОВЛЕНИЕ ниже).
Что Самый MVVM-легкий дружественный путь состоит в том, чтобы обработать эти события?
ОБНОВЛЕНИЕ: Я смог решить второй вопрос путем Отправки сообщений как это:
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));
Похоже, у вас уже есть решение проблемы. Я бы также предложил следующее:
Посмотрите на использование одного из значений сообщений, предоставленных в mvvm-toolkit, например:
NotificationMessage<T>
Вот так:
Messenger.Default.Send<NotificationMessage<PhoneApplicationPage>>(
new NotificationMessage<PhoneApplicationPage>(this, "Message"));