2017-10-21 5 views
0

J'essaie de naviguer vers l'écran de démarrage lorsque l'utilisateur appuie sur "Déconnexion" dans le menu latéral, il ne peut donc pas avoir la navigation pour revenir à la page précédente. PushModalAsync accepte cela mais le faire à partir de ma MasterDetailPage ne semble pas fonctionner.PushModalAsync from MasterDetailPage, Xamarin Forms

Profile.cs

public partial class Profile : MasterDetailPage 
    { 
     public List<MasterPageItem> menuList { get; set; } 
     public Profile() 
     { 
      InitializeComponent(); 
      this.lblMessage.Text = Settings.Name + " " + Settings.Surname; 
      menuList = new List<MasterPageItem>(); 
      var page1 = new MasterPageItem() { Title = "Home", Icon = "home.png", TargetType = typeof(Page1) }; 
      var page2 = new MasterPageItem() { Title = "Cards", Icon = "card.png", TargetType = typeof(Cards) }; 
      var page3 = new MasterPageItem() { Title = "Transactions", Icon = "settings.png", TargetType = typeof(Transactions) }; 
      var page5 = new MasterPageItem() { Title = "Log out", Icon = "signout.png", TargetType = typeof(MainPage) }; 


      menuList.Add(page1); 
      menuList.Add(page2); 
      menuList.Add(page3); 
      menuList.Add(page5); 


      navigationDrawerList.ItemsSource = menuList; 
      Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(Page1))); 

     } 
     private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e) 
     { 

      var item = (MasterPageItem)e.SelectedItem; 
      Type page = item.TargetType; 

      Detail = new NavigationPage((Page)Activator.CreateInstance(page)); 
      IsPresented = false; 
     } 



    } 

Ce que j'ai essayé: je essayé de l'assigner à une variable:

var goToMainPage = Navigation.PushModalAsync(new MainPage()); 

puis en ajoutant à l'endroit où je veux:

var page5 = new MasterPageItem() { Title = "Log out", Icon = "signout.png", TargetType = typeof(goToMainPage) }; - Mais cela n'a pas reconnu ma variable.

Existe-t-il d'autres moyens d'y parvenir? Merci.

Répondre

1

Je pense que vous devez changer votre conception. Lorsque vous appuyez sur "Déconnexion" je pense que vous devez aller à une page "Connexion" (peut-être votre "MainPage()" ... Je ne sais pas) et cette page "Connexion" devrait être en dehors de votre " NavigationStack ".

Donc, si votre scénario est

  • PageA = LoginPage
  • PageB = MasterDetailPage (Apparaît après LoginPage)

Vous devriez faire quelque chose comme mince dans votre App.cs

Application.Current.MainPage = new PageA(); 

lorsque vous appuyez sur "Login button" sur PageA(), vous devez changer votre MainPag e

Application.Current.MainPage = new PageB(); 

Vous utilisez Navigation uniquement pour vos « Détails » pages ... donc quand vous appuyez sur « Déconnexion » vous ne devriez pas Poussez ou Pop, mais vous devez changer votre MainPage

Application.Current.MainPage = new PageA(); // Come back to Login 
+0

Merci. J'ai essayé cela mais n'a pas aidé. Il affiche toujours le tiroir de navigation –

+0

Vous pouvez le faire maintenant en ajoutant simplement ceci à app.cs: NavigationPage.SetHasNavigationBar (MainPage, false); –