Attribut x:Phase
Utilisez x :Phase avec l’extension de balisage {x :Bind} pour afficher les éléments ListView et GridView de manière incrémentielle et améliorer l’expérience de panoramique. x :Phase fournit un moyen déclaratif d’obtenir le même effet que l’utilisation de l’événement ContainerContentChanging pour contrôler manuellement le rendu des éléments de liste. Consultez également Mettre à jour les éléments ListView et GridView de manière incrémentielle.
Utilisation des attributs XAML
<object x:Phase="PhaseValue".../>
Valeurs XAML
Terme | Description |
---|---|
PhaseValue | Nombre qui indique la phase dans laquelle l’élément sera traité. La valeur par défaut est 0. |
Notes
Si une liste est en panne rapide avec l’interaction tactile ou à l’aide de la roulette de la souris, en fonction de la complexité du modèle de données, la liste peut ne pas être en mesure d’afficher les éléments suffisamment rapidement pour suivre la vitesse de défilement. Cela est particulièrement vrai pour un appareil portable avec un processeur efficace comme une tablette.
La phase permet le rendu incrémentiel du modèle de données afin que le contenu puisse être hiérarchisé et les éléments les plus importants affichés en premier. Cela permet à la liste d’afficher du contenu pour chaque élément si le mouvement panoramique est rapide et affiche plus d’éléments de chaque modèle au fur et à mesure que le temps le permet.
Exemple
<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>
Le modèle de données décrit 4 phases :
- Présente le bloc de texte DisplayName. Tous les contrôles sans phase spécifiée sont implicitement considérés comme faisant partie de la phase 0.
- Affiche le bloc de texte prettyDate.
- Affiche les blocs de texte prettyFileSize et prettyImageSize.
- Affiche l’image.
Phasing est une fonctionnalité de {x :Bind} qui fonctionne avec des contrôles dérivés de ListViewBase et qui traite de manière incrémentielle le modèle d’élément pour la liaison de données. Lors du rendu d’éléments de liste, ListViewBase affiche une seule phase pour tous les éléments de la vue avant de passer à la phase suivante. Le travail de rendu est effectué dans des lots à tranches temporelles afin que, à mesure que la liste est affichée, le travail requis peut être réévalué et non effectué pour les éléments qui ne sont plus visibles.
L’attribut x :Phase peut être spécifié sur n’importe quel élément d’un modèle de données qui utilise {x :Bind}. Lorsqu’un élément a une phase autre que 0, l’élément est masqué de l’affichage (via Opacity, pas Visibility) tant que cette phase n’est pas traitée et que les liaisons sont mises à jour. Lorsqu’un contrôle dérivé de ListViewBase fait défiler, il recycle les modèles d’éléments à partir d’éléments qui ne sont plus à l’écran pour afficher les éléments qui viennent d’être visibles. Les éléments d’interface utilisateur dans le modèle conservent leurs anciennes valeurs jusqu’à ce qu’elles soient à nouveau liées aux données. Le phasage entraîne le retard de l’étape de liaison de données et, par conséquent, l’exécution progressive doit masquer les éléments de l’interface utilisateur dans le cas où ils sont obsolètes.
Chaque élément d’interface utilisateur n’a peut-être qu’une seule phase spécifiée. Dans ce cas, cela s’applique à toutes les liaisons de l’élément. Si aucune phase n’est spécifiée, la phase 0 est supposée.
Les numéros de phase n’ont pas besoin d’être contigus et sont identiques à la valeur de ContainerContentChangingEventArgs.Phase. L’événement ContainerContentChanging sera déclenché pour chaque phase avant le traitement des liaisons x :Phase.
Le phasage affecte uniquement les liaisons {x :Bind} , et non les liaisons {Binding} .
Le phasing s’applique uniquement lorsque le modèle d’élément est rendu à l’aide d’un contrôle qui prend en compte la phase. Pour Windows 10, cela signifie ListView et GridView. Le phasage ne s’applique pas aux modèles de données utilisés dans d’autres contrôles d’éléments, ou pour d’autres scénarios tels que ContentTemplate ou les sections Hub , dans ce cas, tous les éléments d’interface utilisateur sont liés à la fois.