将 x:Phase 与 {x:Bind} 标记扩展 配合使用,以增量方式呈现 ListView 和 GridView 项,并提高平移体验。 x:Phase 提供了实现与使用 ContainerContentChanging 事件手动控制列表项呈现相同的效果的声明性方法。 另请参阅 以增量方式更新 ListView 和 GridView 项。
XAML 属性用法
<object x:Phase="PhaseValue".../>
XAML 值
| 术语 | Description |
|---|---|
| PhaseValue | 一个数字,指示将处理元素的阶段。 默认值为 0。 |
注解
如果列表通过触摸快速平移或使用鼠标滚轮,则根据数据模板的复杂性,列表可能无法快速呈现项,以跟上滚动速度。 对于具有高效 CPU(如平板电脑)的便携式设备来说,这尤其如此。
Phasing 支持数据模板的增量呈现,以便可以设置内容的优先级,并首先呈现最重要的元素。 这使列表能够在快速平移时显示每个项的部分内容,并随着时间的推移呈现每个模板的更多元素。
Example
<DataTemplate x:Key="PhasedFileTemplate" x:DataType="model:FileItem">
<Grid Width="200" Height="80">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Image Grid.RowSpan="4" Source="{x:Bind ImageData}" MaxWidth="70" MaxHeight="70" x:Phase="3"/>
<TextBlock Text="{x:Bind DisplayName}" Grid.Column="1" FontSize="12"/>
<TextBlock Text="{x:Bind prettyDate}" Grid.Column="1" Grid.Row="1" FontSize="12" x:Phase="1"/>
<TextBlock Text="{x:Bind prettyFileSize}" Grid.Column="1" Grid.Row="2" FontSize="12" x:Phase="2"/>
<TextBlock Text="{x:Bind prettyImageSize}" Grid.Column="1" Grid.Row="3" FontSize="12" x:Phase="2"/>
</Grid>
</DataTemplate>
数据模板描述了 4 个阶段:
- 显示 DisplayName 文本块。 未指定阶段的所有控件都将隐式视为阶段 0 的一部分。
- 显示 prettyDate 文本块。
- 显示 prettyFileSize 和 prettyImageSize 文本块。
- 显示图像。
Phasing 是 {x:Bind} 的一项功能,它适用于派生自 ListViewBase 的控件,并且以增量方式处理数据绑定的项模板。 呈现列表项时, ListViewBase 将为视图中的所有项呈现单个阶段,然后再进入下一阶段。 呈现工作在时间切片的批处理中进行,这样在滚动列表时,可以重新评估所需的工作量,而无需处理那些不再可见的项目。
可以在使用 {x:Bind} 的数据模板中的任何元素上指定 x:Phase 属性。 如果元素的阶段不是 0,则在处理该阶段并更新绑定之前,该元素将从视图(通过 不透明度而不是 可见性)隐藏。 滚动ListViewBase派生控件时,该控件会回收已经滚出屏幕的项目的项模板,以显示新出现的项目。 模板中的 UI 元素将保留其旧值,直到它们再次绑定数据。 分段会导致数据绑定步骤延迟,因此分步需要隐藏 UI 元素,以防它们过时。
每个 UI 元素只能指定一个阶段。 如果是这样,它将应用于元素上的所有绑定。 如果未指定阶段,则假定阶段 0。
阶段编号不需要连续,与 ContainerContentChangingEventArgs.Phase 的值相同。 在处理 x:Phase 绑定之前,将为每个阶段引发 ContainerContentChanging 事件。
分段仅影响 {x:Bind} 绑定,而不会影响 {Binding} 绑定。
仅当使用支持分阶段的控件呈现项模板时,才会应用分阶段。 对于 Windows 10,这意味着 ListView 和 GridView。 分段将不适用于其他项控件中使用的数据模板,也不适用于 ContentTemplate 或 Hub 节等其他方案,在这些情况下,所有 UI 元素都将同时绑定数据。