octobre
2010
Si vous utilisez le TabControl en WPF vous avez du remarquer qu’il perd les éléments sélectionnés à chaque fois que l’on change d’onglet.
A chaque fois que l’on change d’onlget, si le nouveau ViewModel est du même type que l’ancien, le TabControl conserve l’instance de la vue courante, alors que si le ViewModel est d’un type différent il crée une nouvelle instance de la vue.
Avec cette solution, on n’a qu’une seule instance de vue en mémoire mais à chaque changement d’onglet, on perd du temps dans la construction d’une nouvelle et on perd le précédent VisualState de la vue.
L’article Keeping the « WPF Tab Control from destroying its children » propose un code pour régler le problème.
Dans ce code, quand un onglet est affiché pour la première fois, la vue est ajoutée dans un Grid. Lors que l’onglet est affiché une nouvelle fois, il masque l’onglet courant affiche le nouveau.
Avec cette solution plusieurs vues sont chargées en mémoire mais le changement d’onglet est bien plus rapide et les vues conservent leur état.
Le code source est ici :
http://www.michaelalbaladejo.com/post/2010/10/26/WPF-TabControl-MVVM-et-gestion-des-instances-des-vues.aspx