Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在母版详细信息页上使用PopToRootAsync?_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何在母版详细信息页上使用PopToRootAsync?

C# 如何在母版详细信息页上使用PopToRootAsync?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我有一个母版详细信息页面,我想在其中添加一个注销功能(基本上是一个poptorootasync)。例如,下面是菜单列表: 客户信息-这会将用户重定向到客户信息页面。 注销-这将使用“等待应用程序.Current.MainPage.Navigation.PopToRootAsync();”函数 问题是我有一个可观察的集合,我不知道如何将PopToRootAsync添加到这个集合中 这是我的密码: MenuItems = new ObservableCollection<HomePageMen

我有一个母版详细信息页面,我想在其中添加一个注销功能(基本上是一个poptorootasync)。例如,下面是菜单列表:
客户信息-这会将用户重定向到客户信息页面。
注销-这将使用“等待应用程序.Current.MainPage.Navigation.PopToRootAsync();”函数

问题是我有一个可观察的集合,我不知道如何将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**) }
});
选定事件

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) }
您将对其进行如下初始化:

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设计为根页面,无需使用
导航.PopToRootAsync()
返回根页面

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;
            }

        }
    }
这段代码将注销设置为根页面

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文件夹下载源文件。

什么是HomePageMenuItem?@FreakyAli它是一个类,该类做什么?正如您在Observable集合中看到的,它在主细节中设置菜单列表的标题id和目标类型page@FreakyAli如何在这里向根目录添加pop?我没有单击事件如果(Obj.IsHome)我应该将其放在哪里?我使用PoptRoot删除了所有页面,因此登录页面是唯一打开的页面,但是对于master detail pag,此方法不起作用。包含所有详细信息页面的主详细信息页面是根页面。