Xamarin.Forms не может вызвать OnDisappearing () - PullRequest
0 голосов
/ 28 мая 2020

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

Что я нашел: https://forums.xamarin.com/discussion/89563/intercept-page-leaving-event https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.page.ondisappearing?view=xamarin-forms

Проблема в том, что если я просто скопирую код как есть, я получаю сообщение о причине переопределения (no suitable method found to override), которое не позволит мне оставить код как есть:

enter image description here

* То же самое происходит с OnBackButtonPressed()

Изменено и просто оставлено без переопределения, и его просто не будет вызывается любым способом ..

protected void OnDisappearing()
{
    Exiting();
}

private async void Exiting()
{
    System.Threading.Tasks.Task tmpShouldExit = Application.Current.MainPage.DisplayAlert("Hello", "Hi", "OK");
}

Что-то мне не хватает? Есть ли другой метод, который я могу использовать?

Спасибо

1 Ответ

0 голосов
/ 28 мая 2020

Как Джейсон заставил меня заметить.

Я помещал это в ViewModel, и это должно быть в коде View, потому что вы переопределяете метод страницы.

Затем, если вы хотите получить доступ к методу ViewModel из представления, вы можете создать BindingContext для этого:

using MyProject.PageModels;
using System;
using System.Collections.Generic;

using Xamarin.Forms;

namespace MyProject.Pages
{
    public partial class MyViewPage : ContentPage
    {
        public MyViewPage()
        {
            InitializeComponent();
            NavigationPage.SetBackButtonTitle(this, string.Empty);
        }

        protected override void OnDisappearing()
        {
            base.OnDisappearing();

            var pageViewModel = (MyViewModel)this.BindingContext;

            if(pageViewModel.CertainConditionShowAlert())
            {
                 System.Threading.Tasks.Task tmpShouldExit = Application.Current.MainPage.DisplayAlert("Hi", "Hello", "OK");
            }

        }
    }

}
...