x:Phase 屬性
將 x:Phase 與 {x:Bind} 標記擴充功能結合使用,以累加方式呈現 ListView 和 GridView 項目並改善平移體驗。 x:Phase 提供了一種聲明性方式來實現與使用 ContainerContentChanging 事件手動控制清單項目的呈現相同的效果。 另請參閱增量更新 ListView 和 GridView 項目。
XAML 屬性用法
<object x:Phase="PhaseValue".../>
XAML 值
詞彙 | 描述 |
---|---|
PhaseValue | 指示將處理元素的階段的數字。 預設值是 0。 |
備註
如果透過觸控或使用滑鼠滾輪快速移動列表,則根據資料範本的複雜性,列表可能無法足夠快地轉譯項目以跟上滾動的速度。 對於平板電腦等具有高能源效率 CPU 的便攜式設備來說尤其如此。
分階段支援資料範本的增量呈現,以便可以對內容進行優先排序,並首先呈現最重要的元素。 如果快速移動,這使得清單能夠顯示每個項目的一些內容,並且在時間允許的情況下將呈現每個範本的更多元素。
範例
<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 文字區塊。
- 顯示影像。
定相是 {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 元素都會立即進行資料綁定。