C# Xamarin表单导航到登录在注销后不起作用

C# Xamarin表单导航到登录在注销后不起作用,c#,xamarin.forms,C#,Xamarin.forms,因此,我在xamarin表单中有一个登录页面,用户可以通过打开hamburger菜单及其在我的ListView中的HomeMenuItems来导航到该页面。当用户登录时,我导航回主页并从导航堆栈中删除登录页面: var nextPage = new HomePage(); await this.Navigation.PushAsync(nextPage); Navigation.RemovePage(this); 还可以更改Hamburger导航以添加新的HomeMenuItems,如MyPa

因此,我在xamarin表单中有一个登录页面,用户可以通过打开hamburger菜单及其在我的ListView中的HomeMenuItems来导航到该页面。当用户登录时,我导航回主页并从导航堆栈中删除登录页面:

var nextPage = new HomePage();
await this.Navigation.PushAsync(nextPage);
Navigation.RemovePage(this);
还可以更改Hamburger导航以添加新的HomeMenuItems,如MyPage和注销,如:

var md = (MasterDetailPage)Application.Current.MainPage;
var menu = (MenuPage)md.Master;
menu.showmychildren();

它可以工作,但当我注销时,每当我尝试导航到登录页面时,我会将汉堡菜单更改回注销版本,它会将我导航到主页,我不知道它为什么这样做

从汉堡包菜单导航到登录页面:

public void hideall()
{
    InitializeComponent();

    ucet_stack.IsVisible = false;
    ucet.IsVisible = false;
    photo_sack.IsVisible = false;
    photo.IsVisible = false;

    menuItems = new List<HomeMenuItem>
    {
        new HomeMenuItem {Id = MenuItemType.Home, Title="> HomePage" },
        new HomeMenuItem {Id = MenuItemType.Login, Title="> Login" },
         new HomeMenuItem {Id = MenuItemType.Sponsors, Title="> Sponsors" }
    };

    ListViewMenu.ItemsSource = menuItems;

    ListViewMenu.SelectedItem = menuItems[0];

    ListViewMenu.ItemSelected += async (sender, e) =>
    {
        if (e.SelectedItem == null)
            return;

        var id = (int)((HomeMenuItem)e.SelectedItem).Id;
        await RootPage.NavigateFromMenu(id);
    };
}

注销后。

根据您的描述,我会给您一些建议:

1.移除初始化组件;您无需再次调用此方法

2.如果要在方法hideall中从汉堡菜单导航到登录页面,可以尝试更改菜单项中项目的顺序:

将登录项作为数组中的第一个元素。在母版页中重置ListViewMenu.ItemsSource后,它将显示菜单项中的第一页

3.通过这个问题和你的评论,我不知道你的注销按钮在哪里?在家庭菜单上?在登录页面


4.在方法ListViewMenu.ItemSelected中导航页面,我认为导航到哪个页面取决于id,因此您可以在wait RootPage.NavigateFromMenuid行添加断点;然后检查SelectedItem的id,查看在导航页面时它是否为MenuItemType.Login类型。

每当我尝试导航到LoginPage时-此代码在哪里?我添加了更多示例来解释它。HideAll为什么调用InitializeComponent?HideAll应该自动导航到登录,还是用户必须先点击登录按钮?这是对我的测试,InitializeComponent最初不在那里。在用户单击菜单中的注销后调用HideAll,它会导致LoginPage的构造函数,在那里注销完成,在那里调用HideAll切换回用户未登录时应该看到的菜单,并使用pushasync导航到主页。这听起来非常复杂。为什么LoginPage的构造函数处理注销?为什么在他们未登录时导航到主页?如果用户未登录,为什么要显示菜单?为什么不直接显示一个模式登录页面,这样用户除了登录之外别无选择?
var md = (MasterDetailPage)Application.Current.MainPage;
var menu = (MenuPage)md.Master;
menu.hideall();
menuItems = new List<HomeMenuItem>
 {
    new HomeMenuItem {Id = MenuItemType.Login, Title="> Login" },
    new HomeMenuItem {Id = MenuItemType.Home, Title="> HomePage" },    
    new HomeMenuItem {Id = MenuItemType.Sponsors, Title="> Sponsors" }
 };