Главная » Silverlight » Сохранение состояния страницы

0

Если пользователи будут часто переключаться между сложными страницами, имеет смысл создать каждую страницу один раз и хранить ее экземпляр в памяти. Такой под­ход позволяет также запоминать состояния страниц, включая информацию, введенную пользователями в элементы управления.

Для реализации этой задачи необходима система идентификации страниц. Можно применить строковые имена, однако лучше создать перечисление, что облегчит обра­ботку ошибок. Ниже приведено перечисление, идентифицирующее три страницы.

public enum Pages

(

MainWindow, ReviewPage, AboutPage

}

Страницы можно хранить в закрытых полях пользовательского класса приложения. Ниже приведен простой словарь, квитирующий страницы.

private static Dictionary<Pages, UserControl> pageCache = new Dictionary<Pages,UserControl>();

В методе Navigate () создавайте страницы только по мере необходимости, не созда­вайте их "про запас".

public static void Navigate(Pages newPage)

{

/ / Извлечение текущего объекта приложения и приведение // к типу пользовательского (производного) // класса Арр

Арр currentApp = (Арр)Application.Current;

// Проверка, существует ли страница

if (pageCache.ContainsKey(newPage)) {

II Создание экземпляра страницы и его кеширование / / для использования в будущем Type type = currentApp.GetType(); Assembly assembly = type.Assembly; pageCache[newPage] = (UserControl)assembly.Createlnstance( type.Namespace + "." + newPage.ToString());

}

// Замена выводимой страницы

currentApp.rootGrid.Children.Clear();

currentApp.rootGrid.Children.Add(pageCache[newPage]);

}

Теперь можно переключать страницы, указав элемент перечисления Pages. Арр.Navigate(Pages.MainWindow);

Существует лишь одна версия страницы, хранящаяся в памяти на протяжении всей жизни приложения, поэтому при навигации с одной страницы на другую состояния страниц остаются неизменными (рис. 7.2).

Рис. 7.2. Переход между страницами

История браузера

Описанный метод навигации обладает существенным ограничением: браузер ниче­го не знает о переходе с одной страницы на другую. Переход обратно выполняется с по­мощью элементов управления Silverlight, поэтому кнопка Back (Назад), расположенная на панели инструментов браузера, возвращает пользователя к предыдущей странице HTML, а не Silverlight (приложение Silverlight при этом завершается).

Можно создать систему навигации, более эффективно интегрированную в браузер и поддерживающую кнопку Back, но для этого нужно применить средства взаимодей­ствия между Silverlight и HTML. В предыдущем издании данной книги, посвященной Silverlight 2, подробно рассмотрен соответствующий пример приложения на основе кода JavaScript. Однако теперь интегрировать навигацию с историей браузера вручную нет необходимости, потому что Silverlight 3 поддерживает специальные классы Frame и Раде, предназначенные для навигации. С их помощью указанная задача решается намного проще (см. далее), чем путем создания кода JavaScript.

Источник: Мак-Дональд, Мэтью. Silverlight 3 с примерами на С# для профессионалов. : Пер. с англ. —- М. : ООО «И.Д. Вильяме», 2010. — 656 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии