Сохранение состояния Page между переходами

Рейтинг: 1Ответов: 1Опубликовано: 17.06.2011

Есть приложение, использующее WPF и его страничную систему навигации (страницы - экземпляры System.Windows.Controls.Page). Переход между страницами осуществляется с помощью <Hyperlink> и стандартной навигации (вперёд/назад).

Возникает вопрос, как сохранять состояние между страницами, т.к. по умолчанию страница пересоздаётся. Свойство Page.KeepAlive в данном случае не помогает, т.к. предназначено только для присутствия/отсутствия записи о странице в истории переходов.

Ответы

▲ 1Принят

Сохранение состояния содержимого с помощью журнала переходов.

Журнал обеспечивает запоминание данных в объекте Page при переходах, включая данные элементов управления. В частности, запись журнала для каждого объекта Page действует как временный контейнер для соответствующего состояния Page.

...

Когда Page содержит элементы управления, не упомянутые в предыдущем списке, или когда состояние сохраняется в пользовательских объектах, необходимо написать код для сохранения в журнале состояния страницы при переходах Page.

То есть состояние стандартных контролов сохраняется в журнале, а для тех данных, которые не сохраняются, надо писать код на основе FrameworkPropertyMetadata.Journal или IProvideCustomContentState. Пример такого кода: Custom Journal in WPF. Логика переходов: WPF Navigation.