共用方式為


x:Phase 屬性

x:Phase{x:Bind} 標記擴充功能結合使用,以累加方式呈現 ListViewGridView 項目並改善平移體驗。 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 個階段:

  1. 呈現 DisplayName 文字區塊。 所有未指定階段的控制項都將隱式視為階段 0 的一部分。
  2. 顯示 PrettyDate 文字區塊。
  3. 顯示 PrettyFileSize 和 PrettyImageSize 文字區塊。
  4. 顯示影像。

定相是 {x:Bind} 的功能,可與從 ListViewBase 衍生的控制項結合使用,並以累加方式處理資料繫結的項目範本。 轉譯清單項目時,ListViewBase 會在進入下一階段之前為視圖中的所有項目轉譯一個階段。 轉譯工作按時間分片批量執行,以便在滾動清單時,可以重新評估所需的工作,並且不會對不再可見的項目執行轉譯工作。

可以在使用 {x:Bind} 的資料範本中的任何元素上指定 x:Phase 屬性。 當元素的階段不為 0 時,該元素將從檢視中隱藏 (透過不透明度,而不是可見性),直到處理該階段並更新綁定。 當滾動 ListViewBase 衍生的控制項時,它將回收不再出現在螢幕上的項目的項目模板,以呈現新的可見項目。 模板中的 UI 元素將保留其舊值,直到再次進行資料綁定。 分階段會導致資料綁定步驟延遲,因此分階段需要隱藏 UI 元素,以防它們過時。

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

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

定相只影響 {x:Bind} 綁定,而不影響 {Binding} 綁定。

只有當使用支援定相的控制項呈現項目範本時,才會套用定相。 針對 Windows 10,這表示 ListViewGridView。 分階段不適用於其他項目控制項中使用的資料模板,或其他場景 (例如 ContentTemplateHub 部分),在這些情況下,所有 UI 元素都會立即進行資料綁定。