【问题标题】:Blocking UI on click in Caliburn.Micro, WPF在 Caliburn.Micro,WPF 中单击时阻止 UI
【发布时间】:2019-05-02 18:26:31
【问题描述】:

如何在Caliburn.Micro中屏蔽UI?

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

如何通过阻止View 来等待我的ViewModel 中的Task 结束?

编辑

我在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

【问题讨论】:

标签: c# wpf task caliburn.micro


【解决方案1】:

因为我不想让用户双击“发送表单”按钮

执行此操作的标准方法只是禁用按钮。或者,如果您想禁用整个表单,请禁用整个窗口:

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

您应该将IsEnabled 属性添加到您的视图模型类,然后将其绑定到视图的IsEnabled 属性。

与无响应的应用程序相比,禁用窗口对用户来说更好,因为这种方法允许用户将其最小化或将其移开,如果它花费了意想不到的长时间。

【讨论】:

  • 感谢您的反馈,但我在帖子中提到了Caliburn.Micro,因为我使用这个框架来表达我的观点。正因为如此,我不能像你提到的那样阻止我的按钮,因为 IsEnabled 在 caliburn 中是未定义的;s ViewModels
  • @michasaucer:您应该自己将IsEnabled 属性添加到您的视图模型类,然后将其绑定到视图的IsEnabled 属性。任务完成后不要忘记将其设置回 true。
  • 谢谢!我在IsEnabled 上的按钮上添加了Binding = ButtonEnableState,我在VM 类中创建了属性并且它有效!请编辑您的答案,以便您将来帮助某人:)
  • 我有一个小问题,我制作了像你这样的财产(IsEnabledget, set),我在AcceptButton 上将其设置为false,但在窗口启动时,它设置为false (在我点击我的按钮之前)。你能告诉我,如何只在我点击按钮时触发false,而不是之前?
  • @michasaucer:默认设置属性为truebool isEnabled {get;set;} = true;
猜你喜欢
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
相关资源
最近更新 更多