Просмотр не обновляется после использования js .InvokeAsyn c в Blazor - PullRequest
1 голос
/ 04 августа 2020

Этот код, похоже, не удаляет mov ie из пользовательского интерфейса. Модель действительно меняется. Пользовательский интерфейс тоже изменится, только если я явно назову StateHasChanged().

Код:

@code{
    string name = "Guy";
    public bool display { get; set; } = false;
    [Parameter] public List<Movie> Movies { get; set; }

    private async void Delete(Movie movie)
    {
        bool confirm = await js.InvokeAsync<bool>("confirm", "Sure?");
        if (confirm == true)
        {

            Movies.Remove(movie);
            Console.WriteLine(Movies.Count);
            //StateHasChanged();
        }
    }

}

И пользовательский интерфейс очень прост:

@inject IJSRuntime js
<h1>Hello, world!</h1>

Welcome ,@StringsHelpers.toUpper(name) , to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />

<div>
    <h3>Movie</h3>
    <input type="checkbox" @bind="display" />
    <GenericList List="Movies">
        <ElementTemplate>
            <IndMovie IsDisplayed="display" Movie="context" Delete="Delete"></IndMovie>
        </ElementTemplate>
    </GenericList>

    <div>
        @foreach (var item in Movies)
        {
            @item.Title
        }
    </div>

    <br />
</div>

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Похоже, что частный asyn c void Delete (Mov ie mov ie) должен вместо этого возвращать Task

0 голосов
/ 05 августа 2020

попробуйте это:

  public async Task Delete(Movie movie)
    {
        bool confirm = await js.InvokeAsync<bool>("confirm", "Sure?");
        if (confirm == true)
        {

            Movies.Remove(movie);
            Console.WriteLine(Movies.Count);
            //StateHasChanged();
        }
    }

Другая проблема может быть в том, что список фильмов не обновляется в родительском состоянии.

Если код не заставляет вас пытаться поставить Удалить в родительском компоненте и передайте его как параметр

...