Atributo x:Phase
Use x:Phase con la extensión de marcado {x:Bind} para representar elementos ListView y GridView de forma incremental y mejorar la experiencia de movimiento panorámico. x:Phase proporciona una manera declarativa de lograr el mismo efecto que el uso del evento ContainerContentChanging para controlar manualmente la representación de elementos de lista. Consulte también Actualizar elementos ListView y GridView de forma incremental.
Uso del atributo XAML
<object x:Phase="PhaseValue".../>
Valores de XAML
Término | Descripción |
---|---|
PhaseValue | Número que indica la fase en la que se procesará el elemento. El valor predeterminado es 0. |
Comentarios
Si una lista se desplaza rápidamente con toque o usa la rueda del mouse, dependiendo de la complejidad de la plantilla de datos, es posible que la lista no pueda representar los elementos lo suficientemente rápido como para mantenerse al día de la velocidad de desplazamiento. Esto es especialmente cierto para un dispositivo portátil con una CPU eficaz para energía, como una tableta.
La fase permite la representación incremental de la plantilla de datos para que el contenido se pueda priorizar y los elementos más importantes representados en primer lugar. Esto permite que la lista muestre contenido para cada elemento si el movimiento panorámico se realiza rápidamente y representará más elementos de cada plantilla según permita el tiempo.
Ejemplo
<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>
La plantilla de datos describe 4 fases:
- Presenta el bloque de texto DisplayName. Todos los controles sin una fase especificada se considerarán implícitamente parte de la fase 0.
- Muestra el bloque de texto prettyDate.
- Muestra los bloques de texto prettyFileSize y prettyImageSize.
- Muestra la imagen.
Phasing es una característica de {x:Bind} que funciona con controles derivados de ListViewBase y que procesa incrementalmente la plantilla de elemento para el enlace de datos. Al representar elementos de lista, ListViewBase representa una sola fase para todos los elementos de la vista antes de pasar a la siguiente fase. El trabajo de representación se realiza en lotes de intervalos de tiempo para que, a medida que se desplaza la lista, se pueda volver a evaluar el trabajo necesario y no se realice para los elementos que ya no están visibles.
El atributo x:Phase se puede especificar en cualquier elemento de una plantilla de datos que use {x:Bind}. Cuando un elemento tiene una fase distinta de 0, el elemento se ocultará desde la vista (a través de opacidad, no visibilidad) hasta que se procese esa fase y se actualicen los enlaces. Cuando se desplaza un control derivado de ListViewBase, reciclará las plantillas de elementos de los elementos que ya no están en pantalla para representar los elementos recién visibles. Los elementos de la interfaz de usuario dentro de la plantilla conservarán sus valores antiguos hasta que se vuelvan a enlazar datos. La fase hace que se retrase el paso de enlace de datos y, por tanto, es necesario ocultar los elementos de la interfaz de usuario en caso de que estén obsoletos.
Cada elemento de interfaz de usuario puede tener solo una fase especificada. Si es así, se aplicará a todos los enlaces del elemento . Si no se especifica una fase, se asume la fase 0.
Los números de fase no necesitan ser contiguos y son los mismos que el valor de ContainerContentChangingEventArgs.Phase. El evento ContainerContentChanging se generará para cada fase antes de procesar los enlaces x:Phase .
La fase solo afecta a los enlaces {x:Bind} , no a los enlaces {Binding} .
La fase solo se aplicará cuando la plantilla de elemento se represente mediante un control que sea consciente de la fase. Para Windows 10, significa ListView y GridView. Las fases no se aplicarán a las plantillas de datos usadas en otros controles de elementos o en otros escenarios, como las secciones ContentTemplate o Hub , en esos casos, todos los elementos de la interfaz de usuario se enlazarán a la vez.