UWP - отображать диалог сообщений 1 раз - PullRequest
0 голосов
/ 03 мая 2018

У меня есть код ниже:

if (jumlahiddb < jumlahbuku)
{
        DownloadBukuKomik(url);

        string KomikUpdate = @"INSERT INTO books (id,title,folder_id,identifier) SELECT " + intID + ",'" + namaFile + ".pdf',67,'" + namaFile +
             ".pdf' WHERE not exists (select id AND title AND folder_id AND identifier FROM books WHERE id=" + intID + " and title='" + namaFile +
             ".pdf' AND folder_id=67 and identifier='" + namaFile + ".pdf')";
        Debug.WriteLine(KomikUpdate.ToString());
        var komikQuery = objConnUpdate.Prepare(KomikUpdate);
        komikQuery.Step();
}
else
{
    bool shown = false;
    if (!shown)
    {
        MessageDialog messageDialog1 = new MessageDialog("Jumlah komik bertambah sebanyak " + jumlahbuku + " komik pada menu Komik Pendidikan", "Update Berhasil");
        messageDialog1.Commands.Add(new UICommand("OK", (command) =>
        {
            DownloadBukuVideo.IsOpen = false;
            Downloading.IsOpen = false;
            ukomikBtn.Visibility = Visibility.Visible;
            downloadKomikBtn.Visibility = Visibility.Collapsed;
            ukomikText.Visibility = Visibility.Collapsed;
            ukomikText.Text = "";
            shown = true;
        }));
         await messageDialog1.ShowAsync();
}

У меня проблема, когда я нажимаю кнопку OK, снова появляется диалоговое окно с сообщением. Я хочу, чтобы диалог сообщений отображался только 1 раз. Как это решить?

1 Ответ

0 голосов
/ 04 мая 2018

Проблема в том, что вы объявляете переменную shown в локальной области видимости, поэтому она инициализируется и задается каждый раз, когда запускается код окна показа сообщения .

Чтобы избежать этого, объявите это на более высоком уровне - например, на уровне класса. Например, на основе кода, которым вы поделились в комментариях:

class myClass {

    private bool _shown;

    public async void KomikMsgDialog()
    {
        if (!_shown) // If we haven't shown the dialog yet
        {
            MessageDialog messageDialog1 = new MessageDialog("Jumlah komik bertambah sebanyak " + jumlahbuku + " komik pada menu Komik Pendidikan", "Update Berhasil");
            messageDialog1.Commands.Add(new UICommand("OK", (command) =>
            {
                DownloadBukuVideo.IsOpen = false;
                Downloading.IsOpen = false;
                ukomikBtn.Visibility = Visibility.Visible;
                downloadKomikBtn.Visibility = Visibility.Collapsed;
                ukomikText.Visibility = Visibility.Collapsed;
                ukomikText.Text = "";
            }));
            await messageDialog1.ShowAsync();
            _shown = true; // Flag the dialog as having been shown
        }
    }
}

Таким образом, при первом вызове метода он будет проверять, было ли показано диалоговое окно, чего не было, поэтому он отобразит диалоговое окно и пометит его как показанный. В следующий раз он проверит флаг и не покажет диалог.

...