x:Fázisattribútum

Az x:Phase és a {x:Bind} korrektúrakiterjesztés használatával növekményesen jelenítheti meg a ListView - és GridView-elemeket , és javíthatja a pásztázó élményt. x:A fázis deklaratív módon valósítja meg ugyanazt a hatást, mint a ContainerContentChanging esemény használata a listaelemek megjelenítésének manuális vezérléséhez. Lásd még az Update ListView és a GridView elemeket növekményesen.

XAML-attribútumok használata

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

XAML-értékek

Időszak Description
PhaseValue Az elem feldolgozásának fázisát jelző szám. Az alapértelmezett érték 0.

Megjegyzések

Ha egy listát érintéssel vagy egérkerékkel pásztáznak, akkor az adatsablon összetettségétől függően előfordulhat, hogy a lista nem képes elég gyorsan megjeleníteni az elemeket, hogy lépést tartson a görgetés sebességével. Ez különösen igaz egy olyan hordozható eszközre, amely energiatakarékos processzorral, például táblagéppel rendelkezik.

A phasing lehetővé teszi az adatsablon növekményes renderelését, hogy a tartalom rangsorolva legyen, és a legfontosabb elemeket jelenítse meg először. Ez lehetővé teszi, hogy a lista megjelenítsen néhány tartalmat az egyes elemekhez, ha gyorsan pásztázó, és az idő lehetővé teszi az egyes sablonok további elemeinek megjelenítését.

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>

Az adatsablon 4 fázist ír le:

  1. Megjeleníti a DisplayName szövegblokkot. A megadott fázis nélküli összes vezérlő implicit módon a 0. fázis része lesz.
  2. A prettyDate szövegblokkot jeleníti meg.
  3. A prettyFileSize és a prettyImageSize szövegblokkokat jeleníti meg.
  4. Megjeleníti a képet.

A fokozatosság a {x:Bind} funkciója, amely a ListViewBase-ből származó vezérlőkkel működik, és növekményesen dolgozza fel az elemsablont az adatkötéshez. Listaelemek megjelenítésekor a ListViewBase egyetlen fázist jelenít meg a nézetben lévő összes elemhez, mielőtt továbblépne a következő fázisra. A renderelési munka időszeletelt kötegekben történik, így a lista görgetése során a szükséges munka újra kiértékelhető, és a már nem látható elemek esetében nem végezhető el.

Az x:Phase attribútum a(z) {x:Bind}-t használó adatsablon bármely elemén megadható. Ha egy elemnek 0-tól eltérő fázisa van, az elem elrejtve lesz a nézet elől ( átlátszatlanságon, nem láthatóságon keresztül), amíg az adott fázis feldolgozásra nem kerül, és a kötések frissülnek. Ha egy ListViewBase-alapú vezérlő görgetve van, a már nem látható elemekből újrahasznosítja az elemsablonokat az újonnan látható elemek megjelenítéséhez. A sablon felhasználói felületi elemei mindaddig megőrzik a régi értékeiket, amíg újra nem kötik az adatokat. A fokozatosság miatt az adatkötési lépés késni fog, ezért a fokozatosság érdekében el kell rejteni a felhasználói felület elemeit, ha elavultak.

Előfordulhat, hogy minden felhasználói felületi elemhez csak egy fázis van megadva. Ha igen, ez az elem összes kötésére érvényes lesz. Ha nincs megadva fázis, a 0. fázist feltételezzük.

A fázisszámoknak nem kell folytonosnak lenniük, és megegyeznek a ContainerContentChangingEventArgs.Phase értékével. A ContainerContentChanging esemény minden fázisra kiváltódik, mielőtt az x:Phase kötéseket feldolgoznák.

A fázisos kezelés csak {x:Bind} kötéseket érinti, a {Binding} kötéseket nem.

A fázisok csak akkor alkalmazhatók, ha az elemsablont olyan vezérlővel jelenítik meg, amely képes felismerni a fázisokat. Windows 10 esetén ez a ListView-t és a GridView-t jelenti. A fokozatosság nem vonatkozik a más elemvezérlőkben használt adatsablonokra, illetve más forgatókönyvekre, például a ContentTemplate - vagy a Hub-szakaszokra – ezekben az esetekben az összes felhasználói felületi elem egyszerre kötött lesz.