Navigation.PushAsync (). Когда нажата стрелка назад, страница кажется все еще в памяти - PullRequest
0 голосов
/ 13 мая 2019

Я пишу приложение Xamarin.В App.Xaml.cs я выставляю некоторые события.Я создал главную страницу следующим образом:

var nav = new NavigationPage(new MainPage());
        MainPage = nav;

Затем с главной страницы я нажимаю еще одну страницу:

void DevicePictureBox_Click(object sender, EventArgs args)
    {
         Image imse = (Image)sender;
         String NameofDevice =                       
         devicesHandlesDictionary_byDevicepictureID[imse.Id].Name;

         var p = new DevicesPage(NameofDevice);

         Navigation.PushAsync(p);

DevicesPage подписывается на событие (отображается из приложения).Настройка некоторого Debug.WriteLine в коде, который я обнаружил, что DevicesPage все еще активен при переходе обратно к MainPage (нажатие стрелки назад или с помощью Navigation.PopAsync ()).Также, когда я снова перехожу на DevicesPage, код выполняется дважды (строка Degug.WriteLine в окне вывода появляется дважды) и 3,4,5 и т. Д., Если я продолжаю идти вперед и назад.Кажется, что новая страница создается каждый раз, а предыдущая все еще работает в фоновом режиме.Я понимаю, что события должны быть отписаны (в том случае, когда это должно быть сделано).Также меня сбивает с толку тот факт, что код все еще работает на странице, на которую вы вернулись.Как удалить страницу?

1 Ответ

3 голосов
/ 14 мая 2019

DevicesPage все еще активен при переходе обратно на MainPage

То, что вы уходите со страницы, не означает, что вы покончили с ней. Вы можете использовать его позже. Вы можете явно очистить его ресурсы, если вам нужно (например, отменить подписку на обработчики событий в OnDisappearing), но это не происходит автоматически

Кажется, что новая страница создается каждый раз

это так, потому что вы явно создаете новый экземпляр из DevicesPage каждый раз

var p = new DevicesPage(NameofDevice);
Navigation.PushAsync(p);

ничто не мешает вам сохранить ссылку на экземпляр DevicesPage и повторно использовать его вместо того, чтобы всегда создавать новый

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...