如何从主要详细信息页面导航到xamarin表单中的内容页面?

问题描述 投票:0回答:2

我有一个登录页面,这是一个导航页面,在这里我导航到主详细页面。但现在我想回到登录页面,当我点击退出按钮。这是我为此做的。 My login pageMaster detail page我想,当我点击退出时,控件存在于MDP并返回登录页面。

我的LoginVM

//here i navigate to my home page(Master detail page)

if (user.UserName == Employees.UserName && user.Password == Employees.Password)
{
    await App.Current.MainPage.DisplayAlert("success", "Login success", "OK");

    await App.Current.MainPage.Navigation.PopAsync();
    var masterDetailPage = new MasterDetailPage1();
    masterDetailPage.Detail = new NavigationPage(new Page1());
    Application.Current.MainPage = masterDetailPage;
}

我的主要详细页面Xml

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyProject.Views.Profile.MasterDetailPage1"
             xmlns:pages="clr-namespace:MyProject.Views.Profile"
                  >
    <MasterDetailPage.ToolbarItems>
        <ToolbarItem Text="Logout" Clicked="ToolbarItem_Clicked"/>
    </MasterDetailPage.ToolbarItems>
    <MasterDetailPage.Master>

        <pages:MasterDetailPage1Master x:Name="MasterPage" />

    </MasterDetailPage.Master>

  <MasterDetailPage.Detail>

  </MasterDetailPage.Detail>

</MasterDetailPage>

主要详细页面的CS

public partial class MasterDetailPage1 : MasterDetailPage
{           
    public MasterDetailPage1()
    {
        InitializeComponent();               
    }

    //some other code

    private void ToolbarItem_Clicked(object sender, EventArgs e)
    {
        (this.Detail as NavigationPage).PushAsync(new LoginPage());
        //App.Current.MainPage.Navigation.PushModalAsync(new LoginPage());
    }
}

但我不工作。导航到登录页面成功但在工具栏中显示我不想要的注销和后退按钮。所以我怎么做

xamarin.forms navigation master-detail
2个回答
0
投票
                var masterDetailPage = new MasterDetailPage1();
                masterDetailPage.Detail = new NavigationPage(new Page1());
                Application.Current.MainPage = masterDetailPage;

在这里,您将主页的详细信息声明为导航页面,并将其设置为当前主页。但是你现在在你的NagiationPage中,所以当你打电话时

            (this.Detail as NavigationPage).PushAsync(new LoginPage());

您在导航堆栈中推送新的登录页面,但仍可通过后退按钮访问其他页面,您要做的是重新定义主页面:

                Application.Current.MainPage = new LoginPage();

0
投票

首先,您不需要在LoginVM中调用以下代码行。因为最后你设置Application.Current.MainPage

await App.Current.MainPage.Navigation.PopAsync();

为什么要推送登录页面?如果要完全注销用户,则他/她应该无法通过单击后退按钮返回上一页。

在我看来,你应该再次设置Application.Current.MainPage。可能与你在App.xaml.cs中所做的一样。

© www.soinside.com 2019 - 2024. All rights reserved.