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

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

< Самостоятельная работа 4 || Самостоятельная работа 5: 123 || Лекция 15 >
Аннотация: Данная работа посвящена организации обмена данными в приложении.

Список ключевых терминов: обмен данными, класс App

Цель работы: освоить методику организации обмена данными в приложениях

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

Приложения для Windows Phone, как и любые другие приложения, нуждаются во внутренних механизмах обмена данными. То есть, в простейшем виде, пользователь может ввести некоторые данные на странице №1, эти данные могут понадобиться на странице №2. При этом возможен как сценарий, когда со страницы №1 осуществляется прямой переход на страницу №2, а возможно, что "страница №1" - это страница настроек, данные, введенные на которой должны быть доступны всем остальным страницам. Более того, если расширить эту идею, обмен данными внутри приложения – это не только обмен информацией между страницами, и не только обмен информацией, которую вводит пользователь. Например, в приложении может быть описан некий объект, не имеющий визуального представления, но работающий с данными, которые должны поступать в него из других частей приложения. Приложение может, например, загружать некоторые данные из Интернета, или, скажем, получать ключ доступа к учетной записи пользователя после успешной авторизации в интернет-сервисе. Подобные данные или ключи могут никогда не выводиться в интерфейсе, но они могут быть нужны для обеспечения работоспособности различных механизмов.

Сейчас мы рассмотрим методики обмена данных внутри приложения, доработав приложение из проекта P4_1, разработкой которых мы занимались в Лабораторной работе №4. Переработаем приложение для реализации следующей функциональности:

  1. При переходе со страницы MainPage.xaml на страницу CommonPage.xaml на ней, в текстовом поле, выводится то имя пользователя, которое было введено на странице MainPage.xaml
  2. На станице CommonPage.xaml будет размещена фигура, фон которой закрашен цветом, задаваемым на странице Settings.xaml. Изменение цвета на странице настроек должно приводить к изменению цвета фигуры на странице, где размещена фигура

Передача параметров при вызове страницы и использование общедоступного поля класса App

Мы можем передать параметры вызываемой странице, подготовив, во-первых, саму эту страницу к приему параметров, во-вторых – передав эти параметры при её вызове. Мы реализовали эту функциональность при вызове страницы CommonPage.xaml со страницы MainPage.xaml. В Листинге 19.9.1 приведен код страницы MainPage.xaml.

using System;
using System.Windows;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;

namespace P4_1
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Конструктор
        public MainPage()
        {
            InitializeComponent();

        }

        private void cmdEnter_Click(object sender, RoutedEventArgs e)
        {
            if (txtLogin.Text != "")
            {
                string destination = "/CommonPage.xaml" + String.Format("?User_name={0}", txtLogin.Text);
                NavigationService.Navigate(new Uri(destination, UriKind.Relative));
            }
            else
            {
                MessageBox.Show("Нужно ввести учетные данные");
            }

        }
  
        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            NavigationService.RemoveBackEntry();
            base.OnNavigatedFrom(e);
        }
       
    }
}
Листинг 19.1. Код страницы MainPage.xaml

В предыдущем примере, где мы использовали ту же страницу для демонстрации возможности отмены навигации, мы производили проверку заполнения в соответствующем событии. Теперь мы производим проверку на то, заполнено ли поле, еще до вызова команды навигации. Если поле не заполнено, мы выводим соответствующее сообщение. Если заполнено – формируем строку вызова страницы CommonPage.xaml и вызываем её. В начале строки, в которой мы передаём параметры, стоит знак "?", после чего следуют пары вида Имя_параметра=Значение_параметра. При передаче нескольких параметров эти пары разделяются знаком "&".

На страницу CommonPage.xaml добавлено текстовое поле для вывода строки, в которой использован текст, переданный ей со страницы MainPage.xaml. На этой же странице мы разместили прямоугольник, который собираемся закрашивать. Для хранения информации о цвете прямоугольника (точнее – о кисти, которой будем его закрашивать, хотя таким же образом, с соответствующими изменениями, можно было бы хранить и цвет, создавая потом на его основе кисть, и другие данные), мы используем общедоступное поле класса App, в Листинге 19.2 приведен фрагмент файла App.xaml.cs с описанием соответствующего поля. Обратите внимание на состав директив using – для работы с переменной типа SolidColorBrush нам понадобится пространство имен System.Windows.Media. Подобный подход позволяет организовывать универсальную систему обмена данными внутри приложения. В классе App можно размещать и общедоступные методы.

using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using P4_1.Resources;
using System.Windows.Media;

namespace P4_1
{
    public partial class App : Application
    {
        /// <summary>
        /// Обеспечивает быстрый доступ к корневому кадру приложения телефона.
        /// </summary>
        /// <returns>Корневой кадр приложения телефона.</returns>
        public static PhoneApplicationFrame RootFrame { get; private set; }

        public SolidColorBrush MyBrush = new SolidColorBrush(Colors.Green); 

        /// <summary>
        /// Конструктор объекта приложения.
        /// </summary>
        public App()
        {
Листинг 19.2. Фрагмент кода App.xaml.cs
< Самостоятельная работа 4 || Самостоятельная работа 5: 123 || Лекция 15 >