Comment implémenter la navigation/redirection conditionnelle pour une application universelle Windows de manière MVVM

StackOverflow https://stackoverflow.com//questions/25053625

Question

J'ai une application universelle Windows qui implique une connexion.Un scénario typique avec ce type d’application est celui de différents états.Par exemple, si l'utilisateur ne s'est pas encore connecté pour la première fois ou s'il s'est déjà connecté auparavant et vient de rouvrir l'application.Selon l'état voici les actions

IfLoggedIn - Afficher la page d’accueil || IfNotLoggedIn - Afficher la page de connexion

Maintenant, en fonction de la condition (état), nous devons afficher différentes pages.

Ma question est similaire à ce mais je voulais comprendre comment implémenter la même chose dans MVVM et quel est le bon endroit pour mettre cette logique conditionnelle.

Le mettre dans app.xaml.cs résoudra le problème mais gâchera votre app.xaml.cs et violera le MVVM car ViewModel ne gère pas la logique d'interaction.

La solution que j'ai essayée est

  1. Créez une page intermédiaire (Intermediate.xaml).
  2. Créez le ViewModel correspondant (IntermediateViewModel.cs) pour ce qui précède.
  3. Dans le constructeur de ce ViewModel, incorporez l'instruction conditionnelle pour décider sur quelle page naviguer.

Supposons que j'ai ma condition dans la variable booléenne IsLoggedIn.Où mettre le chèque conditionnel ?

Le code dans mon IntermediateViewModel est le suivant

public bool IsLoggedIn {get; set;}
//IsLoggedIn contains the condition of whether the user is logged-in or not-logged-in

public IntermediateViewModel()
{
    if (IsLoggedIn == false) 
    {
        NavigationService.Navigate("LoginPage");
    }
    else if (IsLoggedIn == true)
    {
        NavigationService.Navigate("HomePage");
    }
}

Le problème avec cette solution est que vous avez maintenant une page supplémentaire (Intermediate.xaml) dans votre backstack.Existe-t-il un moyen de s'en débarrasser ?

Ce et des solutions similaires ne semblent plus pertinentes pour les applications universelles Windows (Windows 8.1/Windows Phone 8.1).

Est-ce que quelqu'un sait comment implémenter cela correctement avec MVVM ?

Était-ce utile?

La solution

Eh bien, dans ce cas, MVVM ne tient pas car cela devrait se produire avant qu'une vue ne soit sélectionnée.Pourquoi ne créez-vous pas une classe ('Navigator' ou autre) contenant votre logique et fournissant une propriété ('InitialPage') que vous utilisez dans l'application (au lieu de la page initiale codée en dur) pour accéder à la première page ?De cette façon, vous conservez votre logique en dehors de la classe App et il y a peu de modifications à y apporter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top