共用方式為


x:Phase 屬性

搭配 x:Phase{x:Bind} 標記延伸模組,逐步渲染 ListViewGridView 項目,並改善滑動體驗。 x:Phase 提供宣告式方式,以達到與使用 ContainerContentChanging 事件手動控制清單項目轉譯相同的效果。 另請參閱 以累加方式更新 ListView 和 GridView 專案

XAML 屬性使用方式

<object x:Phase="PhaseValue".../>

XAML 值

術語 Description
相位值 表示將處理元素的階段的數字。 預設值為 0。

備註

如果使用觸控設備或滑鼠滾輪快速滑動清單,則根據資料範本的複雜度,清單可能無法以足夠快的速度渲染項目,從而無法跟上捲動速度。 對於具有節能 CPU 的便攜式設備(例如平板電腦)尤其如此。

階段化可啟用資料範本的累加轉譯,以便排定內容的優先順序,並先轉譯最重要的元素。 這可讓清單在快速平移時顯示每個項目的一些內容,並在時間允許的情況下渲染每個範本的更多元素。

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 個階段:

  1. 顯示 DisplayName 文字區塊。 所有未指定階段的控制項都會隱含地視為階段 0 的一部分。
  2. 顯示 prettyDate 文字區塊。
  3. 顯示 prettyFileSize 和 prettyImageSize 文字區塊。
  4. 顯示影像。

階段是 {x:Bind} 的一項功能,可與衍生自 ListViewBase 的控制項協同運作,並逐步處理資料繫結的項目模板。 轉譯清單項目時, ListViewBase 會先轉譯檢視中所有項目的單一階段,再移至下一個階段。 渲染工作會以時間片批次方式執行,這樣在捲動清單時,可以重新評估所需的渲染工作,避免對不再可見的項目執行不必要的處理。

x:Phase 屬性可以在使用 {x:Bind} 的資料範本中的任何元素上指定。 當元素具有 0 以外的階段時,該元素將從視圖中隱藏(透過不 透明度,而不是 可見性),直到處理該階段並更新繫結為止。 捲動 ListViewBase 衍生控制項時,它會從不再出現在畫面上的專案中回收專案範本,以轉譯新可見的專案。 範本內的 UI 元素會保留其舊值,直到再次繫結資料為止。 分階段會導致資料繫結步驟延遲,因此分階段需要隱藏 UI 元素,以防它們過時。

每個 UI 元素只能指定一個階段。 如果是這樣,這將適用於元素上的所有繫結。 如果未指定階段,則假設階段為 0。

階段編號不需要是連續的,而且與 ContainerContentChangingEventArgs.Phase 的值相同。 在處理 x:Phase 繫結之前,將會針對每個階段引發 ContainerContentChanging 事件。

階段只會影響 {x:Bind} 繫結,而不影響 {Binding} 繫結。

只有在使用感知階段的控制項轉譯專案範本時,才會套用階段。 對於 Windows 10,這意味著 ListViewGridView。 分階段不會套用於其他項目控制中的資料範本,也不適用於其他情境,例如ContentTemplateHub區段。在這些情況下,所有的 UI 元素都會同時進行資料繫結。