Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare x:Phase con l'estensione di markup {x:Bind} per eseguire il rendering incrementale degli elementi ListView e GridView e migliorare l'esperienza di panoramica. x:Phase offre un modo dichiarativo per ottenere lo stesso effetto dell'uso dell'evento ContainerContentChanging per controllare manualmente il rendering degli elementi dell'elenco. Vedere anche Aggiornare gli elementi ListView e GridView in modo incrementale.
Utilizzo degli attributi XAML
<object x:Phase="PhaseValue".../>
Valori XAML
| Termine | Description |
|---|---|
| PhaseValue | Numero che indica la fase in cui verrà elaborato l'elemento. Il valore predefinito è 0. |
Osservazioni:
Se un elenco viene panoramica rapidamente con il 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 efficiente per l'alimentazione, ad esempio un tablet.
La suddivisione consente il rendering incrementale del modello di dati, in modo da poter dare priorità al contenuto e rendere per primi gli elementi più importanti. Ciò consente all'elenco di visualizzare alcuni contenuti per ogni elemento se la panoramica viene eseguita velocemente e eseguirà il rendering di più elementi di ogni schema man mano che il tempo lo permette.
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>
Il modello di dati descrive 4 fasi:
- Presenta il blocco di testo DisplayName. Tutti i controlli senza una fase specificata verranno considerati implicitamente parte della fase 0.
- Mostra il blocco di testo prettyDate.
- Mostra i blocchi di testo prettyFileSize e prettyImageSize.
- 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 viene 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 Opacity, non Visibility) 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.