应用通知进度栏和数据绑定

使用应用通知内的进度栏,可以向用户传达长时间运行的操作的状态,例如下载、视频呈现、练习目标等。

应用通知中的进度栏可以是“不确定的”(没有特定值,使用动画点指示正在进行的操作)或“确定的”(显示填充条的特定百分比,如 60%)。

下图显示了一个确定型进度条,其中标记了其所有对应的属性。

有关应用通知的详细信息,请参阅 应用通知概述

带有进度栏属性标记的应用通知
财产 类型 必需 说明
标题 字符串 或 BindableString 获取或设置可选的标题字符串。 支持数据绑定。
价值 double 或 AdaptiveProgressBarValueBindableProgressBarValue 获取或设置进度栏的值。 支持数据绑定。 默认值为 0。 可以是介于 0.0 和 1.0 之间的双精度,AdaptiveProgressBarValue.Indeterminate,或者是 new BindableProgressBarValue("myProgressValue")
ValueStringOverride 字符串 或 BindableString 获取或设置要显示的可选字符串,而不是默认百分比字符串。 如果未提供此项,将显示“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 上调用方法,使用数据绑定字段构造通知内容。
  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);

然后,使用新的 AppNotificationProgressData 实例调用 AppNotificationManager.Default.UpdateAsync 来更新进度值。 增加序列号,使平台知道这是一个更新版本。

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%。

更新序列完成后(例如,文件已完成下载),请考虑 替换 最后一步的通知,因为:

  • 最终通知可能具有不同的布局,例如删除进度栏或添加新按钮。
  • 用户可能已关闭进度通知,但仍希望在操作完成时看到弹出窗口。

另见