Problème Historique Navigation

Mar 29, 2013 at 6:54 AM
Bonjour,

Sur ma main page, j'ai un bouton Configuration qui est fixe et le ContentControl avec le binding CurrentView.

L'historique de navigation fonctionne très bien quand je navigue à l'aide du CurrentView avec plusieurs UserControl.

Lorsque je clique sur le bouton Configuration, j'arrive a accédé à ma page mais dès que je souhaite faire un retour avec la commande suivante, il ne se passe rien.

J’espère avoir été assez clair dans mes explications.

Ci dessous le code. Si besoin je peux t'envoyer le projet.
Cordialement,
Emilien

Dans le ModelView Configuration
        public RelayCommand AnnulerViewModelCommand { get; set; }

        public ConfigurationViewModel()
        {
            AnnulerViewModelCommand = new RelayCommand(GoBack, CanGoBack);
        }

        private bool CanGoBack()
        {
            return SimpleIoc.Default.GetInstance<INavigation>().CanGoBack();
        }

        private void GoBack()
        {
           SimpleIoc.Default.GetInstance<INavigation>().GoBack();  
        }
Pour naviguer vers la vue Configuration
        public RelayCommand ConfigurationViewModelCommand { get; set; }

          public MainViewModel()
        {
             _timerLoadAccueil = new DispatcherTimer
            {
                Interval = new TimeSpan(0, 0, 0, 0, 500)
            };
            _timerLoadAccueil.Tick += LoadAccueil;
            _timerLoadAccueil.Start(); 
              
              ConfigurationViewModelCommand = new RelayCommand(OpenConfigurationViewModel);
        }
        private void OpenConfigurationViewModel()
          {
              SimpleIoc.Default.GetInstance<INavigation>()
                       .NavigateTo<ConfigurationViewModel>( this, new object[]{ }, true);
          }
Dans le fichier MainWindows.xaml
<Button Content="Configuration" Margin="0,0,100,0" Command="{Binding ConfigurationViewModelCommand}" />
Coordinator
Mar 29, 2013 at 9:51 AM
Bonjour,

alors si j'ai bien compris ton problème, il s'agit d'une erreur de "logique".

En effet ton bouton de configuration est placé sur ton MainViewModel (qui sert de conteneur pour les autres ViewModel), lorsque tu lance la navigation vers ton ConfigurationViewModel, tu lui demande de revenir en historique (par la valeur this) sur ce MainViewModel, mais qui se trouve normalement EN-DEHORS du contexte de navigation puisqu'il est conteneur de cette navigation.

Tu as donc 2 solutions pour ce problème :
  • Soit ton bouton de configuration se trouve dans le ViewModel que tu affiches avec la fonction LoadAccueil et du coup lorsque tu naviguera vers la configuration tu pourra définir ce ViewModel en historique
  • Soit tu utilise la nouvelle fonction de Navegar, "GetViewModelCurrent" qui te permet d'avoir l'instance du ViewModel courant dans la navigation (je voulais la faire depuis un moment cette fonction et du coup là ça devrait te débloquer). Ce qui se traduirait par :
//Récupére l'instance du ViewModel courant dans la navigation
var currentInstanceViewModel = SimpleIoc.Default.GetInstance<INavigation>().GetViewModelCurrent();
SimpleIoc.Default.GetInstance<INavigation>.NavigateTo<ConfigurationViewModel>( currentInstanceViewModel, new object[]{ }, true);
Dis moi si cela fonctionne.
Mar 29, 2013 at 5:43 PM
Bonjour,

Merci pour ton retour rapide.

J'ai mis à jour navegar via le package Nuget en version 2.7.0.

Par contre j'ai une erreur sur GetViewModelCurrent() ça m'indique le message suivant :

'Navegar.INavigation' ne contient pas une définition pour 'GetViewModelCurrent' et aucune méthode d'extension 'GetViewModelCurrent' acceptant un premier argument de type 'Navegar.INavigation' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)

Merci pour ton aide.
Emilien
Coordinator
Mar 29, 2013 at 5:51 PM
A l'exécution tu as ce message ?

Envoyé à partir de mon Windows Phone

De : [email removed]
Envoyé : ‎29/‎03/‎2013 17:43
À : [email removed]
Objet : Re: Problème Historique Navigation [Navegar:438419]

From: Emilien_a

Bonjour,

Merci pour ton retour rapide.

J'ai mis à jour navegar via le package Nuget en version 2.7.0.

Par contre j'ai une erreur sur GetViewModelCurrent() ça m'indique le message suivant :

'Navegar.INavigation' ne contient pas une définition pour 'GetViewModelCurrent' et aucune méthode d'extension 'GetViewModelCurrent' acceptant un premier argument de type 'Navegar.INavigation' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)

Merci pour ton aide.
Emilien
Mar 29, 2013 at 6:45 PM
Non en permanence. il ne reconnait pas la variable.

Emilien
Coordinator
Mar 29, 2013 at 6:57 PM
Ok c'est quand tu codes. Essaie de prendre la dll sur codeplex stp, j'ai peut être raté le montage du package nuget ce matin, je l'ai fait rapidement

Envoyé à partir de mon Windows Phone

De : [email removed]
Envoyé : ‎29/‎03/‎2013 18:45
À : [email removed]
Objet : Re: Problème Historique Navigation [Navegar:438419]

From: Emilien_a

Non en permanence. il ne reconnait pas la variable.

Emilien
Mar 29, 2013 at 7:09 PM
Effectivement, j'ai remplacé la DLL que j'ai téléchargé sur codeplex. Je n'ai plus ce problème. Il y a une erreur sur le package Nuget.

Du coup cette méthode fonctionne pour la navigation.

En tout cas merci beaucoup.

Emilien
Coordinator
Mar 29, 2013 at 7:14 PM
Ok merci pour le retour, je corrigerai le package.

Envoyé à partir de mon Windows Phone

De : [email removed]
Envoyé : ‎29/‎03/‎2013 19:09
À : [email removed]
Objet : Re: Problème Historique Navigation [Navegar:438419]

From: Emilien_a

Effectivement, j'ai remplacé la DLL que j'ai téléchargé sur codeplex. Je n'ai plus ce problème. Il y a une erreur sur le package Nuget.

Du coup cette méthode fonctionne pour la navigation.

En tout cas merci beaucoup.

Emilien