Блокировка пользовательского интерфейса при нажатии в Caliburn.Micro, WPF - PullRequest
0 голосов
/ 02 мая 2019

Как заблокировать пользовательский интерфейс в Caliburn.Micro?

public async void AcceptButton()
{
    await this.httpDataService.Register(account);
    Show.SuccesBox(alert);
    this.TryClose();
}

Как ожидать окончания Task в моем ViewModel, заблокировав View?

РЕДАКТИРОВАТЬ

я добавил привязку на моей кнопке в xaml:

 IsEnabled="{Binding isEnabled}"

Тогда мой VM:

bool isEnabled {get;set;}

public async void AcceptButton()
{
    this.isEnabled = false;
    await this.httpDataService.Register(account);
    Show.SuccesBox(alert);
    this.TryClose();
}

В этом случаеAcceptButton всегда неактивен IsEnabled=false.Как вызвать false только при нажатии кнопки?

1 Ответ

0 голосов
/ 02 мая 2019

потому что я не хочу, чтобы пользователь дважды нажимал кнопку «Отправить форму»

Стандартный способ сделать это - просто отключить кнопку.Или, если вы хотите отключить всю форму, затем отключите все окно:

public async void AcceptButton()
{
  this.IsEnabled = false;
  await this.httpDataService.Register(account);
  Show.SuccesBox(alert);
  this.TryClose();
}

Вы должны добавить свойство IsEnabled в свой класс модели представления и затем привязать его к свойству IsEnabledпредставление.

Отключение окна приятнее для пользователя, чем не отвечающее приложение, поскольку этот подход позволяет пользователю свести его к минимуму или убрать с дороги, если это занимает неожиданно много времени.

...