atribut x:Phase

Gunakan x:Phase dengan ekstensi markup {x:Bind} untuk merender item ListView dan GridView secara bertahap dan meningkatkan pengalaman panning. x:Phase menyediakan cara deklaratif untuk mencapai efek yang sama seperti menggunakan peristiwa ContainerContentChanging untuk mengontrol penyajian item daftar secara manual. Lihat juga Memperbarui item ListView dan GridView secara bertahap.

Penggunaan atribut XAML

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

Nilai XAML

Istilah Deskripsi
PhaseValue Angka yang menunjukkan fase di mana elemen akan diproses. Defaultnya adalah 0.

Keterangan

Jika daftar digerakkan dengan cepat dengan sentuhan, atau menggunakan roda mouse, maka tergantung pada kompleksitas templat data, daftar mungkin tidak dapat merender item dengan cukup cepat untuk mengikuti kecepatan pengguliran. Ini terutama berlaku untuk perangkat portabel dengan CPU hemat daya seperti tablet.

Phasing memungkinkan rendering inkremental templat data sehingga konten dapat diprioritaskan, dan elemen terpenting yang dirender terlebih dahulu. Ini memungkinkan daftar untuk menampilkan beberapa konten untuk setiap item jika menggeser cepat, dan akan merender lebih banyak elemen dari setiap templat sebagai waktu yang diizinkan.

Contoh

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

Templat data menjelaskan 4 fase:

  1. Menyajikan blok teks DisplayName. Semua kontrol tanpa fase yang ditentukan akan secara implisit dianggap sebagai bagian dari fase 0.
  2. Memperlihatkan blok teks prettyDate.
  3. Menunjukkan blok teks prettyFileSize dan prettyImageSize.
  4. Menampilkan gambar.

Phasing adalah fitur {x:Bind} yang bekerja dengan kontrol yang berasal dari ListViewBase dan yang secara bertahap memproses templat item untuk pengikatan data. Saat merender item daftar, ListViewBase merender satu fase untuk semua item dalam tampilan sebelum pindah ke fase berikutnya. Pekerjaan penyajian dilakukan dalam batch yang diiris waktu sehingga saat daftar digulir, pekerjaan yang diperlukan dapat dinilai ulang, dan tidak dilakukan untuk item yang tidak lagi terlihat.

Atribut x:Phase dapat ditentukan pada elemen apa pun dalam templat data yang menggunakan {x:Bind}. Ketika elemen memiliki fase selain 0, elemen akan disembunyikan dari tampilan (melalui Opacity, bukan Visibilitas) hingga fase tersebut diproses dan pengikatan diperbarui. Saat kontrol turunan ListViewBase digulir, kontrol tersebut akan mendaur ulang templat item dari item yang tidak lagi ada di layar untuk merender item yang baru terlihat. Elemen UI dalam templat akan mempertahankan nilai lamanya sampai terikat data lagi. Phasing menyebabkan langkah pengikatan data tertunda, dan oleh karena itu phasing perlu menyembunyikan elemen UI jika mereka basi.

Setiap elemen UI mungkin hanya memiliki satu fase yang ditentukan. Jika demikian, itu akan berlaku untuk semua pengikatan pada elemen . Jika fase tidak ditentukan, fase 0 diasumsikan.

Nomor fase tidak perlu berdampingan dan sama dengan nilai ContainerContentChangingEventArgs.Phase. Peristiwa ContainerContentChanging akan dinaikkan untuk setiap fase sebelum pengikatan x:Phase diproses.

Phasing hanya memengaruhi pengikatan {x:Bind} , bukan pengikatan {Binding} .

Phasing hanya akan berlaku ketika templat item dirender menggunakan kontrol yang mengetahui phasing. Untuk Windows 10, itu berarti ListView dan GridView. Phasing tidak akan berlaku untuk templat data yang digunakan dalam kontrol item lain, atau untuk skenario lain seperti bagian ContentTemplate atau Hub —dalam kasus tersebut, semua elemen UI akan terikat data sekaligus.