Сервер Blazor и INotifyPropertyChange - PullRequest
0 голосов
/ 17 июня 2020

Используя эту страницу индексации бритвы, я могу обновить возраст Фреда, нажав кнопку «Изменить возраст Фреда». Он использует INotifyPropertyChange для обновления пользовательского интерфейса, а не StateHasChanged ().

@page "/"
<h1>@fred.Age</h1>
<button @onclick="fred.ChangeAge">Change Fred's Age</button>
<button @onclick="fred.ChangeAgeAutomatically">Change Fred's Age Automatically</button>

@code{
Blazetest2.Data.Person fred;

  protected override void OnInitialized()
  {
      fred = new Data.Person();
      base.OnInitialized();
  }
}

У моего личного класса есть один свойство Age и два метода ChangeAge () и ChangeAgeAutomatuically ();

private int age = 30;
    public event PropertyChangedEventHandler PropertyChanged;
    public int Age
    {
        get => age; set
        {
            age = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Age)));
        }
    }
    public void ChangeAge()
    {
        int i = new Random().Next(20, 30);
        this.Age = i;
    }
    public async Task ChangeAgeAutomatically()
    {
        while (true)
        {
            ChangeAge();
            await Task.Delay(2000);
        }
    }
}

Нажатие на кнопку «Изменить возраст Фреда» работает, но нажатие на кнопку «Изменить возраст Фреда автоматически» не работает (возраст Фреда меняется один раз, но затем останавливается ). Может кто-нибудь объяснить мне, почему. Я хотел бы обновить пользовательский интерфейс в фоновом режиме во время работы с другими компонентами пользовательского интерфейса и не обращать внимания на мой текущий компонент, потерянный при вызове StatehasChanged ().

...