Опубликован: 02.08.2013 | Доступ: свободный | Студентов: 464 / 16 | Длительность: 18:38:00
Специальности: Программист
Самостоятельная работа 5:

Обмен данными внутри приложения

< Самостоятельная работа 4 || Самостоятельная работа 5: 123 || Лекция 15 >

В Листинге 19.6 вы можете видеть код страницы Settings.xaml.cs.

using System;
using System.Windows;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using System.Windows.Media;
namespace P4_1.Pages
{
    public partial class Settings : PhoneApplicationPage
    {
        public Settings()
        {
            InitializeComponent();
        }

        private void cmdLogOut_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {

            if (NavigationService.CurrentSource == new Uri("/MainPage.xaml", UriKind.Relative))
            {
                while (NavigationService.CanGoBack)
                {
                    NavigationService.RemoveBackEntry();
                }

                (Application.Current as App).MyBrush.Color = Colors.Green;
            }
            base.OnNavigatedFrom(e);
        }


        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            cpMy.Color = (Application.Current as App).MyBrush.Color;
            base.OnNavigatedTo(e);
        }

        protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
        {
            (Application.Current as App).MyBrush.Color = cpMy.Color;
            base.OnBackKeyPress(e);
        }
    }
}
Листинг 19.6.

Здесь, при переходе на страницу мы устанавливаем свойство Color элемента управления cpMy в то значение цвета, которое хранится в кисти MyBrush, определенной в классе App. Это позволяет пользователю видеть, какой именно цвет является текущим.

Когда пользователь работает с элементом управления cpMy, мы не вызываем никаких событий, записывая выбранный в элементе управления цвет при обработке события OnBackKeyPress. В данном случае выбор пал именно на это событие лишь для того, чтобы привести пример его использования. Здесь, кроме того, можно отменить переход по кнопке Назад (хотя без наличия веских причин делать этого не следует). Для того, чтобы не замедлять навигацию по кнопке Назад, в этом событии не следует размещать код, выполнение которого способно занять некоторое время. Обновить значение цвета в общедоступной кисти мы можем и в ходе выбора этого цвета, реагируя на соответствующее событие элемента cpMy, и в обработчике события OnNavigatedFrom. В этот обработчик, в сравнении с предыдущим вариантом учебного приложения, внесено изменение, которое позволяет уточнить ситуацию очистки стека переходов. Мы проверяем, осуществляется ли переход на страницу MainPage.xaml, и если это так – очищаем стек и сбрасываем к значению по умолчанию цвет кисти. Если в сценарии, подобном нашему, не уделить внимание очистке подобного поля (или иной его обработке), окажется, что если пользователь вошёл в приложение под одной учетной записью, поработал с ним, вышел, и вошёл снова под другой учетной записью, ему могут быть доступны данные, которые введены в первом сеансе работы.

Выводы

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

Задание

Продумайте систему обмена данными между страницами приложения, над котором вы работаете. Подумайте, где достаточно будет передачи данных с использованием параметров, передаваемых странице при её вызове, а где понадобится использовать общедоступное поле, объявленное в классе App. В учебных целях реализуйте оба механизма.

Дополнительные материалы

К данной лекции подготовлено видеоприложение и демонстрационный программный проект.

< Самостоятельная работа 4 || Самостоятельная работа 5: 123 || Лекция 15 >