WP7 – La virtualisation d’interface
On entend beaucoup parler de virtualisation dans différents blogs sur Windows Phone 7 qui mélangent deux concepts de virtualisation : la virtualisation d’interface (UI Virtualization) et la virtualisation de donnée (Data Virtualisation).
Parce que ces deux notions sont importantes, on va commencer par parler de la virtualisation d’interface et de quelques trucs et astuces sur les VirtualizingStackPanel sur WP7.
Présentation
Le concept de virtualisation d’interface existe sur toutes les plateformes applicatives XAML : WPF, Silverlight et Silverlight For Windows Phone 7.
La virtualisation d’interface permet d’afficher une ListBox de plusieurs millions d’éléments instantanément et sans temps de chargement.
Le principe est simple : au lieu de créer des millions de ListBoxItem et des les binder, on va simplement créer ceux qui sont visibles. Ainsi pour une liste d’un million d’éléments, seuls une dizaine de ListBoxItem seront créés.
L’implémentation
Par défaut les ListBox sont virtualisées ou plus exactement elles utilisent un VirtualizingStackPanel qui s’occupe de virtualiser les ListBoxItem.
Il est possible de désactiver la virtualisation mais cela peut avoir de très lourdes conséquences sur les performances de votre application. Le code ci-dessous présente une solution qui consiste à remplacer la VirtualizatingStackPanel par défaut par un StackPanel :
La plateforme WP7
Sur WP7, le VirtualizingStackPanel créé plus d’éléments que nécessaire afin de gérer les scrollings de l’utilisateur sans trop de problème.
Par exemple pour une liste qui affiche 10 éléments, le VirtualizingStackPanel créer 30 éléments. En moyenne il vous suffit de multiplier par trois le nombre d’éléments visibles pour avoir le nombre d’éléments créé.
A noter que les ListBoxItem sont recyclés automatiquement par le VirtualizingStackPanel ainsi une ListBox qui affiche un million d’éléments n’utilisera que 30 ListBoxItem.
Mais si votre ListBox est virtualisée et encore des problèmes de temps de chargement, la virtualisation de données sera peut être la solution (coming soon).
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :