Работа с жизненным циклом. Практика.

Последнее обновление: 31.10.2015

Теперь рассмотрим общие способы работы с событиями жизненного цикла. Для этого создадим новый проект по типу Blank App. Назовем его, к примеру, LifecycleApp.

Проект по умолчанию содержит страницу MainPage, но нам он не понадобится. Для управления навигацией и ее историей нам нужны страницы по типу Basic Page, а не Blank Page. Итак, удалим файл MainPage.xaml и после этого добавим в проект новый элемент по типу Basic Page:

Basic Page in Windows Phone 8.1

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

После этого, во-первых, будет добавлена новая страница Page1.xaml, которая будет уже иметь некоторое содержимое. Во-вторых, в проект также будет добавлена папка Commom с рядом файлов. В итоге структура проекта должна выглядеть так:

Lifecycle in Windows Phone 8.1

Сделаем довольно примитивное приложение, суть которого будет заключаться в сохранении и восстановлении данных текстового поля. Для этого изменим разметку xaml страницы Page1, добавив в нее элемент TextBox и убрав лишние элементы:

<Page
    x:Class="LifecycleApp.Page1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:LifecycleApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid x:Name="LayoutRoot">
        <TextBox x:Name="inputBox"  TextChanged="inputBox_TextChanged" />
    </Grid>
</Page>

Первым делом, нам надо сохранить данные приложения, когда оно переходит в приостановленное состояние. Для управления данными приложения мы можем использовать объект Windows.Storage.ApplicationData. Данный объект поддерживает два варианта сохранения данных: через свойство RoamingSettings и через свойство LocalSettings.

RoamingSettings позволяет сохранять данные в каталоге, который синхронизирован с различными устройствами, например, в облачном хранилище. А свойство LocalSettings позволят сохранить данные на текущем устройстве. Для данной задачи мы используем LocalSettings.

Итак, добавим в файл отделенного кода Page1.xaml.cs следующий код обработчика изменения текста:

private void inputBox_TextChanged(object sender, TextChangedEventArgs e)
{
    Windows.Storage.ApplicationDataContainer localSettings =
        Windows.Storage.ApplicationData.Current.LocalSettings;
    localSettings.Values["userName"] = inputBox.Text;
}

Таким образом, введенное значение будет сохраняться при каждом изменении текста в текстовом поле.

Теперь загрузим ранее сохраненное значение в текстовое поле. Для этого найдем в файле Page1.xaml.cs метод NavigationHelper_LoadState:

private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
}

И изменим его следующим образом:

private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
    Windows.Storage.ApplicationDataContainer localSettings =
        Windows.Storage.ApplicationData.Current.LocalSettings;
    if (localSettings.Values.ContainsKey("userName"))
    {
        inputBox.Text = localSettings.Values["userName"].ToString();
    }
}

Метод NavigationHelper_LoadState является обработчиком события LoadState класса NavigationHelper, который находится в проекте в каталоге Common. Сам обработчик прикрепляется в конструкторе странице.

Теперь мы можем ввести некоторое значение в текстовое поле, приостановить приложение или полность закрыть и открыть его снова. И мы вновь увидим ранее введенное значение. Мы можем эмулировать завершение приложения в Visual Studio после запуска с помощью опции Suspend and shutdown:

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850