Condividi tramite


Attributo x:Phase

Usare x:Phase con l'estensione di markup {x:Bind} per il rendering incrementale delle voci ListView e GridView e per migliorare l'esperienza della panoramica. x:Phase offre un modo dichiarativo per ottenere lo stesso effetto dell'uso dell'evento ContainerContentChanging per controllare manualmente il rendering delle voci dell'elenco. Vedere anche Aggiornare gli elementi ListView e GridView in modo incrementale.

Utilizzo attributo XAML

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

Valori XAML

Termine Descrizione
PhaseValue Numero che indica la fase in cui verrà elaborato l'elemento. Il valore predefinito è 0.

Osservazioni:

Se un elenco viene reso in panoramica veloce con tocco o con la rotellina del mouse, a seconda della complessità del modello di dati, l'elenco potrebbe non essere in grado di eseguire il rendering degli elementi abbastanza velocemente per mantenere il passo con la velocità di scorrimento. Questo è particolarmente vero per un dispositivo portatile con una CPU energeticamente efficiente, ad esempio un tablet.

La suddivisione in fasi consente il rendering incrementale del modello di dati in modo che il contenuto possa essere prioritario e gli elementi più importanti di cui è stato eseguito il rendering. Ciò consente all'elenco di visualizzare alcuni contenuti per ogni elemento per la panoramica veloce ed eseguirà il rendering di più elementi di ogni modello man mano che il tempo è consentito.

Esempio

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

Il modello di dati descrive 4 fasi:

  1. Presenta il blocco di testo DisplayName. Tutti i controlli senza una fase specificata verranno considerati implicitamente parte della fase 0.
  2. Mostra il blocco di testo prettyDate.
  3. Mostra i blocchi di testo prettyFileSize e prettyImageSize.
  4. Mostra l'immagine.

La suddivisione in fasi è una funzionalità di {x:Bind} che funziona con i controlli derivati da ListViewBase e che elabora in modo incrementale il modello di elemento per il data binding. Durante il rendering degli elementi dell'elenco, ListViewBase esegue il rendering di una singola fase per tutti gli elementi della visualizzazione prima di passare alla fase successiva. Il lavoro di rendering viene eseguito in batch con sezioni temporali in modo che, man mano che l'elenco diventa scorrevole, il lavoro necessario può essere rivalutato e non eseguito per gli elementi che non sono più visibili.

L'attributo x:Phase può essere specificato in qualsiasi elemento di un modello di dati che usa {x:Bind}. Quando un elemento ha una fase diversa da 0, l'elemento verrà nascosto dalla visualizzazione (tramite Opacità, non Visibilità) finché tale fase non viene elaborata e le associazioni non vengono aggiornate. Quando viene eseguito lo scorrimento di un controllo derivato da ListViewBase, riciclerà i modelli di elemento dagli elementi che non sono più sullo schermo per eseguire il rendering degli elementi appena visibili. Gli elementi dell'interfaccia utente all'interno del modello manterranno i valori precedenti fino a quando non vengono nuovamente associati a dati. La suddivisione in fasi causa il ritardo del passaggio di data binding e pertanto la suddivisione in fasi deve nascondere gli elementi dell'interfaccia utente nel caso in cui non siano aggiornati.

Ogni elemento dell'interfaccia utente può avere una sola fase specificata. In tal caso, questa operazione verrà applicata a tutte le associazioni sull'elemento. Se non viene specificata una fase, si presuppone la fase 0.

I numeri di fase non devono essere contigui e corrispondono al valore di ContainerContentChangingEventArgs.Phase. L'evento ContainerContentChanging verrà generato per ogni fase prima dell'elaborazione delle associazioni x:Phase.

La suddivisione in fasi influisce solo sulle associazioni {x:Bind}, non sulle associazioni {Binding}.

La suddivisione in fasi verrà applicata solo quando viene eseguito il rendering del modello di elemento usando un controllo che riconosce la suddivisione in fasi. Per Windows 10, significa ListView e GridView. La suddivisione in fasi non verrà applicata ai modelli di dati usati in altri controlli elemento o per altri scenari, ad esempio Le sezioni ContentTemplate o Hub; in questi casi, tutti gli elementi dell'interfaccia utente verranno associati contemporaneamente.