none
Arrêt sur GetNavigationState avec la RP RRS feed

  • Question

  • Bonjour,

    J'ai une erreur que j'arrive pas à résoudre depuis le passage dans la RP. Disons qu'elle se produit pas forcément à une action utilisateur :

    Est-ce connu ?

    Merci, Christophe

    • Déplacé Florin Ciuca vendredi 7 septembre 2012 11:05 (Origine :Développement d’applications de style Metro pour Windows 8)
    jeudi 7 juin 2012 13:38

Réponses

  • Hello,

    J'ai mis un peu de temps car ce nouveau SuspensionManager m'intriguait un peu et je n'avais pas encore pris le temps de regarder son fonctionnment (et il m'a légèrement déçu).

    Apparemment, les méthodes GetNavigationState et SetNavigationState de la frame sont incapables de sérializer / désérializer des types custom. Si l'on veut utiliser le SuspensionManager en l'état, il faut donc ne passer que des strings, entiers etc... en paramètre de navigation.

    Bug ou fonctionnalité? Hélas je pense que c'est le comportement attendu étant donné que les projets de base ne passent que des string via la propriété UniqueId.

    Bon et bien je m'en vais de ce pas réfléchir à comment contourner ce problème d'une manière plus élégante.


    Cyprien Autexier

    lundi 11 juin 2012 00:51

Toutes les réponses

  • En effet si je retire mon paramètre de ma MainPage.xaml.cs : ( e.ClickedItem), je n'ai plus cette erreur à la fin

    FeedGroup _group = e.ClickedItem as FeedGroup;
        if (_group.ID == 4)
        {
            this.Frame.Navigate(typeof(ProjetPage), e.ClickedItem);
        }
        else
        {
            this.Frame.Navigate(typeof(ComputePage), e.ClickedItem);
        }
    Quelqu'un à une piste ?

    vendredi 8 juin 2012 08:50
  • Hello,

    Effectivement c'est bien lié à ton argument de navigation. SuspensionManager utilises Frame.GetNavigationState() et Frame.SetNavigationState pour sauvegarder la backtrace en vue du tombstoning. Ces deux méthodes sérialisent les objets que tu passes en argument de navigation.

    Il est probable que ton ClickedItem présente une propriété que le format interne de la Frame ne supporte pas. il faudrait voir ta classe FeedGroup pour pouvoir éventuellement t'en dire plus.


    Cyprien Autexier

    vendredi 8 juin 2012 15:01
  • Voila m'sieur :

    public class FeedGroup 
        {
            public int ID { get; set; }
            public string Title { get; set; }
            public string SubTitle { get; set; }
            public string Image { get; set; }
            public string ImageH { get; set; }
    
            private List<FeedItem> _Items = new List<FeedItem>();
            public List<FeedItem> Items
            {
                get
                {
                    return this._Items;
                }
                set
                {
                    _Items = value;
                }
            }
        }
    
        public class FeedItem 
        {
            public FeedItem() 
            {
                x = -1;
                y = -1;
            }
            public int ID { get; set; }
            public string Name { get; set; }
            public int Type { get; set; }
            public string PathImage { get; set; }
            public string PathIcon { get; set; }
            public float CoteC{ get; set; }
            public double x{ get; set; }
            public double y { get; set; }
            public double Angle { get; set; }
            public int Couleur
            { 
                get; 
                set;
            }

    vendredi 8 juin 2012 15:09
  • Hello,

    J'ai mis un peu de temps car ce nouveau SuspensionManager m'intriguait un peu et je n'avais pas encore pris le temps de regarder son fonctionnment (et il m'a légèrement déçu).

    Apparemment, les méthodes GetNavigationState et SetNavigationState de la frame sont incapables de sérializer / désérializer des types custom. Si l'on veut utiliser le SuspensionManager en l'état, il faut donc ne passer que des strings, entiers etc... en paramètre de navigation.

    Bug ou fonctionnalité? Hélas je pense que c'est le comportement attendu étant donné que les projets de base ne passent que des string via la propriété UniqueId.

    Bon et bien je m'en vais de ce pas réfléchir à comment contourner ce problème d'une manière plus élégante.


    Cyprien Autexier

    lundi 11 juin 2012 00:51
  • Salut,

    En passant des ID seul à la place des items direct : no problemo ... je trouve ça balo quand même !

    lundi 11 juin 2012 13:25