Индикатор выполнения уведомлений приложения и привязка данных

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

Индикатор выполнения в уведомлении приложения может быть "недетерминированным" (нет определенного значения, анимированные точки указывают, что операция происходит) или "детерминировано" (определенный процент строки заполнен, например 60%).

На рисунке ниже показан детерминированный индикатор прогресса со всеми соответствующими свойствами.

Дополнительные сведения об уведомлениях приложений см. в обзоре уведомлений о приложениях.

Уведомление приложения с пометками свойств индикатора выполнения
Недвижимость Тип Обязательный Описание
Заголовок строка или BindableString false Возвращает или задает строку заголовка, которая может быть необязательной. Поддерживает привязку данных.
Ценность double или AdaptiveProgressBarValue или BindableProgressBarValue false Возвращает или задает значение индикатора выполнения. Поддерживает привязку данных. Значение по умолчанию — 0. Может быть двойным в диапазоне от 0,0 до 1.0, AdaptiveProgressBarValue.Indeterminateили new BindableProgressBarValue("myProgressValue").
ValueStringOverride строка или BindableString false Возвращает или задает необязательную строку, отображаемую вместо процентной строки по умолчанию. Если это не указано, будет отображаться что-то вроде "70%".
Статус строка или BindableString истина Возвращает или задает строку состояния (обязательно), которая отображается слева под индикатором выполнения. Эта строка должна отражать состояние операции, например "Скачивание..." или "Установка..."

Используйте AppNotificationBuilder.AddProgressBar , чтобы добавить индикатор хода выполнения в уведомление. В следующем примере создается уведомление, показанное выше.

var builder = new AppNotificationBuilder()
    .AddText("Downloading your weekly playlist...")
    .AddProgressBar(new AppNotificationProgressBar()
        .SetTitle("Weekly playlist")
        .SetValue(0.6)
        .SetValueStringOverride("15/26 songs")
        .SetStatus("Downloading..."));

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

Обновите индикатор прогресса с помощью привязки данных

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

  1. Создайте содержимое уведомления с полями, привязанными к данным, вызвав Bind методы в AppNotificationProgressBar.
  2. Назначьте тег (и при необходимости группу) для идентификации уведомления.
  3. Задайте начальные значения AppNotificationProgressData .
  4. Отображение уведомления путем вызова AppNotificationManager.Default.Show.
using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;

string tag = "weekly-playlist";
string group = "downloads";

var builder = new AppNotificationBuilder()
    .AddText("Downloading your weekly playlist...")
    .AddProgressBar(new AppNotificationProgressBar()
        .BindTitle()
        .BindValue()
        .BindValueStringOverride()
        .BindStatus());

var notification = builder.BuildNotification();
notification.Tag = tag;
notification.Group = group;

notification.Progress = new AppNotificationProgressData(1)
{
    Title = "Weekly playlist",
    Value = 0.6,
    ValueStringOverride = "15/26 songs",
    Status = "Downloading..."
};

AppNotificationManager.Default.Show(notification);

Затем обновите значения хода выполнения, вызвав AppNotificationManager.Default.UpdateAsync с новым экземпляром AppNotificationProgressData. Увеличьте порядковый номер, чтобы платформа знала, что это новое обновление.

using Microsoft.Windows.AppNotifications;

string tag = "weekly-playlist";
string group = "downloads";

var data = new AppNotificationProgressData(2)
{
    Value = 0.7,
    ValueStringOverride = "18/26 songs"
};

await AppNotificationManager.Default.UpdateAsync(data, tag, group);

Использование UpdateAsync , а не замена всего уведомления гарантирует, что уведомление остается в той же позиции в Центре уведомлений и не перемещается вверх или вниз. Метод возвращает NotificationUpdateResult, указывающий, успешно ли выполнено обновление или не удалось найти уведомление (возможно, пользователь отклонил его).

Элементы, поддерживающие привязку данных

Следующие элементы в уведомлениях приложений поддерживают привязку данных:

  • Все свойства в AppNotificationProgressBar
  • Свойство Text в текстовых элементах верхнего уровня

Обновление или замена уведомления

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

Замена Обновление
Положение в Центре уведомлений Перемещает уведомление в начало центра уведомлений. Оставляет уведомление на месте в Центре уведомлений.
Изменение содержимого Может полностью изменить все содержимое и макет уведомления. Может изменять только свойства, поддерживающие привязку данных (индикатор выполнения и текст верхнего уровня).
Повторное появление в виде всплывающего окна Может снова появиться как всплывающее окно, если SuppressPopupfalse (или установлено на true для автоматической отправки в Центр уведомлений). Не будет повторно появляться как всплывающее окно; Данные уведомления автоматически обновляются в Центре уведомлений.
Пользователь уволен Уведомление о замене всегда отправляется независимо от того, отклонил ли пользователь предыдущее уведомление. Если пользователь отклонил уведомление, обновление не удастся.

Как правило, обновление полезно для информации, которая часто изменяется и не требует непосредственного внимания пользователя, например переход с 50% до 65%.

После завершения последовательности обновлений (например, скачивание файла) рекомендуется заменить уведомление на последний шаг, так как:

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

См. также