繁体   English   中英

如何在主详细信息页面上使用 PopToRootAsync?

[英]How to user PopToRootAsync on Master Detail Page?

我有一个主详细信息页面,我想在其中添加一个注销功能(基本上是一个 poptorootasync)。 例如这里是菜单列表:
客户信息- 这会将用户重定向到客户信息页面。
注销- 这将使用“ await Application.Current.MainPage.Navigation.PopToRootAsync(); ”function。

问题是我有这个 ObservableCollection 我不知道如何将 PopToRootAsync 添加到这个

这是我的代码:

MenuItems = new ObservableCollection<HomePageMenuItem>(new[]
{
   new HomePageMenuItem { Id = 0, Title = "Client Information", TargetType = typeof(ClientInformationMenu) },
   new HomePageMenuItem { Id = 1, Title = "Logout", TargetType = typeof(**HERE IS WHERE TO PUT POP TO ROOT**) }
});

HomePageMenuItem.cs

public class HomePageMenuItem
{
    public HomePageMenuItem()
    {
        TargetType = typeof(ClientInformationMenu);
    }
    public int Id { get; set; }
    public string Title { get; set; }
    public Type TargetType { get; set; }
}

上次选择的事件

private void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        HomePageMenuItem item = e.SelectedItem as HomePageMenuItem;
        if (item == null)
            return;

        var page = (Page)Activator.CreateInstance(item.TargetType);
        page.Title = item.Title;

        Detail = new NavigationPage(page);
        IsPresented = false;

        MasterPage.ListView.SelectedItem = null;
    }

您的 HomePageMenuItem 看起来像这样:

public class HomePageMenuItem
{
    public HomePageMenuItem()
   {
      TargetType = typeof(ClientInformationMenu);
   }
    public bool IsHome{ get; set;}
    public int Id { get; set; }
    public string Title { get; set; }
    public Type TargetType { get; set; }
}

您将像这样初始化它:

   new HomePageMenuItem { Id = 1, Title = "Logout", IsHome= true) }

然后在您的点击事件中,您检查此属性并相应地执行操作

if(Obj.IsHome)
{
    //Code to Pop
}

我猜你有一个登录页面可以导航到主详细信息页面。 当您在主详细信息页面中单击注销时,它将导航到根页面作为注销页面。

我认为Navigation.PopToRootAsync()不是一个好的选择,您可以直接在运行时设置主页。 请注意,MasterDetailPage 设计为根页面,无需使用Navigation.PopToRootAsync()将 go 返回到根页面。

此代码将注销设置为根页面。

void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        var item = e.SelectedItem as MasterPageItem;
        if (item != null)
        {
            if (item.Title == "Logout")
            {
                Application.Current.MainPage =new LogoutPageCS();
            }
            else
            {
                Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
                masterPage.ListView.SelectedItem = null;
                IsPresented = false;
            }

        }
    }

在此处输入图像描述

有关详细信息,您可以从 GitHub 的 MasterDetailsDemo 文件夹中下载源文件。 https://github.com/WendyZang/Test.git

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM