ожидайте ответа DisplayAlert при использовании OnBackButtonpressed () для пользовательского интерфейса - PullRequest
1 голос
/ 13 апреля 2020

Я хотел бы использовать встроенную функцию OnBackButtonPressed() форм Xamarin, чтобы перемещать их на главную страницу или сохранять их на текущей странице, отвечая на DisplayAlert().

Проблема в том, что я Я не могу дождаться ответа (в данном случае OnAlertYesNoClicked();), когда вызывается OnBackButtonPressed(), и поскольку значение по умолчанию для bool false, оно просто закроет приложение.

Is есть ли способ использовать пользовательский ответ как bool для OnBackButtonPressed()?

Пример:

    bool action;
    async public void OnAlertYesNoClicked()
    {
        bool action = await DisplayAlert("Question?", "Are you sure you want to go back? Your result wont be saved!", "Yes", "No");
    }

    protected override bool OnBackButtonPressed()
    {
        OnAlertYesNoClicked();
        if(action == true)
        {
            Navigation.PushModalAsync(new MainPage(), true);
            return false;
        }
        else
        {
            return true;
        }  
    }

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Простой способ переопределить аппаратную кнопку возврата и показать пользователю диалоговое окно подтверждения.

 protected  override  bool OnBackButtonPressed()
    {
        //return base.OnBackButtonPressed();

        Device.BeginInvokeOnMainThread(async () =>
        {
            var result = await this.DisplayAlert("Question?", "Are you sure you want to go back? Your result wont be saved!", "Yes", "No");
            if (result) await this.Navigation.PushAsync(new Page14()); // or anything else

        });


        return true;
    }
0 голосов
/ 13 апреля 2020

Что происходит, так это то, что проверка происходит до того, как значение будет изменено в зависимости от ввода пользователя. Таким образом, вы хотите основывать проверку на вводе пользователем напрямую

Чтобы сделать это, вместо того, чтобы написать то, что вы написали, вы можете сделать это вместо этого:

public async Task<bool> OnAlertYesNoClicked()
{
    return await DisplayAlert("Question?", "Are you sure you want to go back? Your result wont be saved!", "Yes", "No");
}

protected override bool OnBackButtonPressed()
{
    if(OnAlertYesNoClicked().Result())
    ...

Желательно не использовать .Result () для получения ответа но вы не можете изменить OnBackButtonPressed для возврата Task вместо этого.

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