xamarin.forms - Prism DelegateCommand 中的 CanExecute 不起作用
问题描述
当我在短时间内单击该按钮几次时,每次都会调用该方法并且我的应用程序崩溃(当代码尝试导航到另一个页面时)。此问题仅在 Xamarin.Android 中出现(iOS 处理双击)
public bool IsBusy { get; set; }
private DelegateCommand<string> _eventDetailsCommand;
public DelegateCommand<string> EventDetailsCommand => _eventDetailsCommand ?? (_eventDetailsCommand = new DelegateCommand<string>(EventDetails, (x) => !IsBusy));
private void EventDetails(string obj)
{
IsBusy = true;
await _navigationService.NavigateAsync("AnotherPage");
IsBusy = false;
}
Xamarin.Android
棱镜:7.1.0.172(预)
PropertyChanged.Fody (2.2.6):
解决方案
最重要的一点是DelegateCommand.RaiseCanExecuteChanged
您应该首先将 CanNavigate 设置为 false 并且按钮将被禁用,在按钮命令方法代码完成后将其设置为 true
这是我的例子,它工作正常:
private bool _canNavigate = true;
public bool CanNavigate
{
get { return _canNavigate; }
set {
SetProperty(ref _canNavigate, value);
LoginCommand.RaiseCanExecuteChanged();
}
}
private DelegateCommand _loginCommand;
public DelegateCommand LoginCommand => _loginCommand ?? (_loginCommand = new DelegateCommand(Login, () => CanNavigate));
public async void Login()
{
CanNavigate = false;
...do something here
CanNavigate = true;
}
推荐阅读
- ios - 如何将我的 Firebase Analytics 数据传输到 BigQuery?
- ios - youtube 网址打不开
- ruby-on-rails - 模块解析失败:将 React on Rails 与 Antd 一起使用时出现意外字符“@”。
- php - 如何在 html/php 中进行内联样式设置?
- laravel - 方法前的火灾观察者
- three.js - 启用雾时的 OutlineEffect 错误,无效着色器错误:0:204:'fogDepth':重新定义
- x86 - 错误:在 BIOS 设置中禁用了 IBS 分析
- android - 尝试通过 contentProvider 从 sqlite 中删除有条件的行
- javascript - 如何运行2个js函数
- testing - 集成和单元测试 Nifi 进程组