Freigeben über


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 Methode zum Erreichen desselben Effekts wie die Verwendung des ContainerContentChanging-Ereignisses zum manuellen Steuern des Renderns von Listenelementen. Siehe auch inkrementelles Aktualisieren von ListView- und GridView-Elementen.

XAML-Attributverwendung

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

XAML-Werte

Begriff Description
PhaseValue Eine Zahl, die die Phase angibt, in der das Element verarbeitet wird. Der Standardwert ist 0.

Bemerkungen

Wenn eine Liste schnell durch Berühren geblättert oder das Mausrad verwendet wird, kann die Liste je nach Komplexität der Datenvorlage möglicherweise nicht schnell genug Elemente rendern, um mit der Geschwindigkeit des Bildlaufs Schritt zu halten. Dies gilt besonders 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 und die wichtigsten Elemente zuerst gerendert werden können. Dadurch kann die Liste bei schneller Bewegung einige Inhalte für jedes Element anzeigen und es werden weitere Elemente jeder Vorlage gerendert, soweit es die Zeit erlaubt.

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>

Die Datenvorlage beschreibt vier Phasen:

  1. Stellt den DisplayName-Textblock dar. Alle Steuerelemente ohne eine angegebene Phase werden implizit als Teil der Phase 0 betrachtet.
  2. Zeigt den PrettyDate-Textblock an.
  3. Zeigt die prettyFileSize- und prettyImageSize-Textblöcke.
  4. Zeigt das Bild an.

Phasing ist ein Feature von {x:Bind} , das mit Steuerelementen funktioniert, die von ListViewBase abgeleitet sind und die die Elementvorlage inkrementell für die Datenbindung verarbeitet. Beim Rendern von Listenelementen rendert ListViewBase eine einzelne Phase für alle Elemente in der Ansicht, bevor Sie mit der nächsten Phase fortfahren. Die Renderarbeit wird in zeitlich aufgeteilten Abschnitten ausgeführt, sodass beim Scrollen der Liste die erforderliche Arbeit neu eingeschätzt und nicht für Elemente ausgeführt wird, die nicht mehr sichtbar sind.

Das x:Phase-Attribut kann für jedes Element in einer Datenvorlage angegeben werden, das {x:Bind} verwendet. Wenn ein Element eine andere Phase als 0 aufweist, wird das Element aus der Ansicht (über Opacity, nicht Visibility) ausgeblendet, bis diese Phase verarbeitet und Bindungen aktualisiert werden. Wenn ein von ListViewBase abgeleitetes Steuerelement gescrollt wird, werden die Elementvorlagen aus Elementen wiederverwendet, die nicht mehr auf dem Bildschirm angezeigt werden, um die neu sichtbaren Elemente zu rendern. UI-Elemente innerhalb der Vorlage behalten ihre alten Werte bei, bis sie wieder datengebunden sind. Phasing bewirkt, dass der Datenbindungsschritt verzögert wird und daher phasing die UI-Elemente ausblenden muss, falls sie veraltet sind.

Jedes UI-Element darf nur eine Phase angegeben haben. Wenn ja, gilt dies für alle Bindungen für das Element. Wenn keine Phase angegeben ist, wird Phase 0 angenommen.

Phasennummern müssen nicht zusammenhängend sein und sind identisch mit dem Wert von ContainerContentChangingEventArgs.Phase. Das ContainerContentChanging-Ereignis wird für jede Phase ausgelöst, bevor die x:Phase-Bindungen verarbeitet werden.

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

Phasing wird nur angewendet, wenn die Elementvorlage mithilfe eines Steuerelements gerendert wird, das Phasing unterstützt oder für Phasing ausgelegt ist. Für Windows 10 bedeutet dies ListView und GridView. Phasing gilt nicht für Datenvorlagen, die in anderen Elementsteuerelementen verwendet werden, oder für andere Szenarien wie ContentTemplate oder Hub-Abschnitte – in diesen Fällen werden alle UI-Elemente gleichzeitig datengebunden sein.