x:Phase-Attribut

Verwenden Sie x:Phase mit der {x:Bind}-Markuperweiterung , um ListView- und GridView-Elemente inkrementell zu rendern und die Verschiebung zu verbessern. x:Phase bietet eine deklarative Möglichkeit, die gleiche Wirkung zu erzielen wie bei Verwendung des ContainerContentChanging-Ereignisses zum manuellen Steuern des Renderns von Listenelementen. Weitere Informationen finden Sie auch unter Inkrementelles Aktualisieren von ListView- und GridView-Elementen.

XAML-Attributsyntax

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

XAML-Werte

Begriff BESCHREIBUNG
PhaseValue Eine Zahl, die die Phase gibt an, in der das Element verarbeitet wird. Die Standardeinstellung ist 0.

Hinweise

Wenn eine Liste mit Toucheingabe oder mit dem Mausrad schnell verschoben wird, ist die Liste je nach Komplexität der Datenvorlage möglicherweise nicht in der Lage, Elemente schnell genug zu rendern, um mit der Geschwindigkeit des Bildlaufs Schritt zu halten. Dies gilt insbesondere für ein tragbares Gerät mit einer energieeffizienten CPU wie einem Tablet.

Phasing ermöglicht das inkrementelle Rendern der Datenvorlage, sodass der Inhalt priorisiert werden kann und die wichtigsten Elemente zuerst gerendert werden. Dadurch kann die Liste beim schnellen Verschieben für jedes Element einige Inhalte anzeigen und mehr Elemente für jede Vorlage rendern, falls die Zeit dies zulässt.

Beispiel

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

Die Datenvorlage beschreibt vier Phasen:

  1. Stellt den DisplayName-Textblock dar. Alle Steuerelemente ohne Phase werden implizit als zur Phase 0 zugehörig betrachtet.
  2. Zeigt den prettyDate-Textblock.
  3. Zeigt die prettyFileSize- und prettyImageSize-Textblöcke.
  4. Zeigt das Bild.

Phasing ist eine Funktion von {x:Bind}, die aus ListViewBase abgeleitete Steuerelemente verwendet und die Elementvorlage für die Datenbindung inkrementell verarbeitet. Beim Rendern von Listenelementen stellt ListViewBase eine einzelne Phase für alle Elemente in der Ansicht dar, bevor der Wechsel zur nächsten Phase erfolgt. Das Rendern wird in zeitlich unterteilten Stapeln ausgeführt, damit die erforderliche Arbeit bei einem Listenbildlauf neu analysiert und nicht für Elemente ausgeführt werden kann, die nicht mehr sichtbar sind.

Das x:Phase-Attribut kann für jedes Element in einer Datenvorlage, die {x:Bind} verwendet, angegeben werden. Wenn ein Element eine andere Phase als 0 aufweist, wird das Element aus der Ansicht ausgeblendet (über Opacity, nicht über Visibility), bis diese Phase verarbeitet wird und Bindungen aktualisiert werden. Wenn für ein von ListViewBase abgeleitetes Steuerelement ein Bildlauf durchgeführt wird, verwendet es die Elementvorlagen von Elementen, die nicht mehr auf dem Bildschirm sind, erneut, um die neu sichtbaren Elemente zu rendern. UI-Elemente in der Vorlage behalten ihre alten Werte bei, bis sie erneut an Daten gebunden werden. Phasing verursacht das Verzögern dieses Datenbindungsschritts, sodass Phasing die UI-Elemente für den Fall, dass sie veraltet sind, ausblenden muss.

Für jedes UI-Element darf nur eine Phase angegeben werden. Diese gilt dann für alle Bindungen des Elements. Wenn keine Phase angegeben ist, wird die Phase 0 angenommen.

Phasennummern müssen nicht fortlaufend sein und sind mit den Wert der ContainerContentChangingEventArgs.Phase identisch. Das ContainerContentChanging-Ereignis wird für jede Phase vor der Verarbeitung der x:Phase-Bindungen ausgelöst.

Phasing wirkt sich nur auf {x:Bind} -Bindungen aus, nicht auf {Binding}-Bindungen.

Phasing gilt nur, wenn die Elementvorlage mithilfe eines Steuerelements gerendert wird, das Phasing erkennt. Für Windows 10 bedeutet das ListView und GridView. Phasing gilt nicht für Datenvorlagen, die in anderen Elementsteuerelementen verwendet werden, oder für andere Szenarien, wie zum Beispiel die Abschnitte ContentTemplate oder Hub – in diesen Fällen werden alle UI-Elemente auf einmal an Daten gebunden.