J'essaie de créer une application UWP (Universal Windows App) avec C#. Mon problème est le suivant Frame
contrôle : Si je l'utilise sans NavigationCacheMode = Required
Chaque fois que l'utilisateur revient en arrière, la page n'est pas conservée en mémoire et sera recréée. Si je définis NavigationCacheMode
à Required
o Enabled
le retour en arrière fonctionne correctement (pas d'objet nouvelle page) pero si je navigue vers une autre page du même type, l'objet de la page précédente est recyclé et réutilisé (pas de nouvelle instance de page).
Comportement souhaité :
Est-il possible d'obtenir le comportement suivant avec l'original Frame
(comme dans Windows Phone) :
- Créer une nouvelle instance de page sur
Navigate()
- Maintenir l'instance de la page sur
GoBack()
La seule solution que je connaisse est de créer un propre Frame
mais cela conduit à d'autres problèmes (par exemple : absence de SetNavigationState()
etc...)
Exemple de scénario :
Exemple de candidature simple de trois pages : TvShowListPage
, TvShowDetailsPage
, SeasonDetailsPage
.
-
TvShowListPage
est la page d'entrée. Après avoir cliqué sur unTvShow
naviguer versTvShowDetailsPage
. - Maintenant dans
TvShowDetailsPage
sélectionner une saison dans la liste et naviguer jusqu'à l'ongletTvShowDetailsPage
. - Si vous naviguez en arrière, les pages doivent rester en mémoire pour éviter de les recharger.
- Mais si les utilisateurs reviennent à
TvShowListPage
et sélectionne un autreTvShow
elTvShowDetailsPage
est recyclé et se trouve peut-être dans un état erroné (par exemple en affichant le pivot du casting au lieu du premier pivot des saisons)
Je recherche le comportement par défaut de Windows Phone 7 : La navigation crée une nouvelle page dans la pile de pages, le retour en arrière supprime la page supérieure de la pile et affiche la page précédente de la pile (stockée dans la mémoire).
Solution :
Comme il n'y avait pas de solution à ce problème, j'ai dû réimplémenter toutes les classes relatives à la pagination : Page, Frame, SuspensionManager, etc...
En bibliothèque MyToolkit qui fournit toutes ces classes, peut être téléchargé ici : https://github.com/MyToolkit/MyToolkit/wiki/Paging-Overview
Références :
- http://www.jayway.com/2012/05/25/clearing-the-Windows-8-page-cache/ : Pas de bonne solution
-
http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/88e6d1b3-1fa6-4ab4-a816-e77c86ef236f/ : L'implémentation d'une classe de cadre propre n'est pas une solution car elle ne fonctionne pas avec
SuspensionManager
6 votes
C'est probablement l'une des choses les plus ennuyeuses de Windows 8. Merci pour votre solution !