Отключение кнопки из функции async в Blazor

У меня на странице есть следующая модель EditForm:

<EditForm Model="@projectParameters" OnValidSubmit="@SubmitProject">
       <MatButton Raised="true" Type="submit" Disabled="@saveButtonDisabled">@saveButtonName</MatButton>
</EditForm>

Затем следующие функции:

private async Task SubmitProject()
    {
        DisableSave();

        if (pageType == "Create")
        {
            await CreateProject();
        }
        else if (pageType == "Create")
        {
           await EditProject();
        }
    }

а также

void DisableSave()
    {
        saveButtonDisabled = true;
        saveButtonName = "Saving...";
        StateHasChanged();
    }

SubmitProject и DisableSave вызываются правильно, но saveButtonName & disabled никогда не отображается как завершенный, когда CreateProject работает. Что мне не хватает?


person Katie P    schedule 19.09.2019    source источник
comment
Это очень грубый способ добиться цели ...   -  person enet    schedule 19.09.2019


Ответы (1)


Сбросить изменения с помощью await Task.Delay(1);:

private async Task SubmitProject()
{
    await DisableSave();
    ...

потом

async Task DisableSave()
{
    saveButtonDisabled = true;
    saveButtonName = "Saving...";
    await Task.Delay(1); //flush changes
    StateHasChanged(); // not needed
}
person dani herrera    schedule 19.09.2019
comment
Это работает, спасибо !! Не могли бы вы объяснить, почему? Иногда у меня все еще возникают проблемы с пониманием некоторых асинхронных вещей. - person Katie P; 19.09.2019
comment
Речь идет не об асинхронности, а о виртуальном DOM, в конце вызова отправляются только различия, также отправляются различия в потоках пользовательского интерфейса. Я нашел способ сделать это именно так, но я этого не делаю, если это лучший способ, то как я это делаю. - person dani herrera; 19.09.2019
comment
У меня есть еще один умный ответ на эту тему: stackoverflow.com/a/56675814/842935 Просто оформляйте заказ. - person dani herrera; 13.04.2020