Связанная переменная не отображает новое значение в пользовательском интерфейсе - PullRequest
0 голосов
/ 12 июля 2020

У меня есть этот код на моей странице:

@if (players == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <p>Number of Players: @players.Count</p>
    <p>Number of Teams: @teamsCount</p>
    <p>Excess Players: @excessPlayers</p>
}
@code {
    private List<PlayerModel> players;
    private int teamsCount { get; set; }
    private int excessPlayers { get; set; }

    protected override async Task OnInitializedAsync()
    {
        players = await _db.GetPlayers();

        int teamsCount = players.Count / 5;
        int excessPlayers = players.Count % 5;
    }

Загрузка html отображается правильно какое-то время, а затем players.Count правильно обновляется и показывает 41, но teamsCount и excessPlayers всегда отображается 0.

Я пробовал вызывать StateHasChanged() в конце OnInitializedAsync().

Я также пробовал устанавливать teamsCount и excessPlayers отдельным методом и вызывать StateHasChanged(), но ни один из них не работал. И teamsCount, и excessPlayers по-прежнему отображаются как 0, хотя я вижу, что в коде они равны 8 и 1 соответственно, что правильно.

Что я делаю не так?

1 Ответ

2 голосов
/ 13 июля 2020

Вы создаете новые локальные переменные для teamsCount и excessPlayers в своем OnInitializedAsync методе:

protected override async Task OnInitializedAsync()
{
    players = await _db.GetPlayers();

    int teamsCount = players.Count / 5;
    int excessPlayers = players.Count % 5;
}

Вместо этого вы должны устанавливать значения своих свойств:

protected override async Task OnInitializedAsync()
{
    players = await _db.GetPlayers();

    teamsCount = players.Count / 5;
    excessPlayers = players.Count % 5;
}
...