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