Как использовать PopToRootAsync на главной странице сведений? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть главная страница сведений, в которую я хотел бы добавить функцию выхода из системы (в основном, poptorootasync). Например, вот список меню: Информация о клиенте - Это перенаправит пользователя на страницу информации о клиенте. Выход из системы - при этом будет использоваться функция " await Application.Current.MainPage.Navigation.PopToRootAsync (); ".

Проблема в том, что у меня есть эта коллекция 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;
    }

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Я полагаю, у вас есть страница входа в систему, чтобы перейти к главной странице сведений. Когда вы нажимаете выход из системы на главной странице сведений, она переходит на корневую страницу как страницу выхода из системы.

Я думаю, Navigation.PopToRootAsync() не является хорошим выбором, вы можете установить главную страницу непосредственно во время выполнения. И обратите внимание, что MasterDetailPage разработан как корневая страница, поэтому нет необходимости использовать Navigation.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;
            }

        }
    }

enter image description here

Для получения дополнительной информации вы можете загрузить исходный файл из папки MasterDetailsDemo на GitHub. https://github.com/WendyZang/Test.git

0 голосов
/ 30 октября 2019

Ваш 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...