- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要以编程方式提高CanExecuteChanged()
。 ICommand
类如下所示:
public class PlayCommand : ICommand
{
private readonly TpViewModel _tpViewModel;
private bool IsBusy;
public PlayCommand(TpViewModel tpViewModel)
{
_tpViewModel = tpViewModel;
}
public bool CanExecute(object parameter)
{
return !IsBusy;
}
public async void Execute(object parameter)
{
if (IsBusy)
return;
await Play();
}
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
private async Task Play()
{
IsBusy = true;
Console.WriteLine("Play")
IsBusy = false;
}
}
Play
方法完成后,应立即启用
Play()
按钮。但是,启用该按钮之前似乎会延迟一两秒钟。
CommandManager.InvalidateRequerySuggested()
,但是它不起作用。
最佳答案
您可以使用CommandManager.InvalidateRequerySuggested()
,尽管这相当昂贵。但是,您可以使用标准事件模式来扩展您的类。
注意:这仅是基于您的代码的示例,并非旨在成为世界上最好的ICommand
实现,请根据需要对其进行修改
private EventHandler _canExecuteChanged;
public event EventHandler CanExecuteChanged
{
add
{
_canExecuteChanged += value;
CommandManager.RequerySuggested += value;
}
remove
{
_canExecuteChanged -= value;
CommandManager.RequerySuggested -= value;
}
}
public void RaiseCanExecuteChanged()
{
if (!IsBusy)
OnCanExecuteChanged();
}
protected virtual void OnCanExecuteChanged()
=> _canExecuteChanged?.Invoke(this, EventArgs.Empty);
关于c# - 如何以编程方式提高CanExecuteChanged()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53938467/
我可以使用 CanExecuteChanged 更改“可以执行”条件吗? 或者……它的用途是“什么”? 最佳答案 不,您不能使用它来更改可执行状态。它是参与ICommand 的事件和对象模式可以选择收
在我的 ViewModel 中,我有一个 ObservableCollection 的 Person 对象(实现了 INotifyPropertyChanged)和一个 SelectedPerson
我正在尝试 MVVM 模式基本级别,并在 ICommand CanExecute 更改时感到震惊。我有如下 XAML 绑定(bind): 命令: Public Class
我不知道如何使用 CanExecuteChangedEventManager在 MyCommand : ICommand 中。我尝试了以下但 value 是错误的类型: public event Ev
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
Icommand 包含两个方法和一个事件。 两个方法的作用很清楚,但是我无法理解ICommand中提供的事件是做什么的。 CanExecuteChanged 事件何时引发? 下面的解释在MSDN但是我
在我的 WPF UI 中,我使用了我在 xaml 中通过以下代码引用的 RoutedCommands: Command="viewModel:MessageListViewModel.DeleteMe
我从 Josh Smith 的 MVVM tutorial 得到以下代码. 任何人都可以快速解释这段代码的实际作用吗? public event EventHandler CanExecuteChan
我正在分析一个使用 Catel 作为 MVVM 框架的 WPF 应用程序,我已经看到在 ViewModel 中我有 2 个保留路径作为 现在我在附加到上下文菜单的行为中创建了这样的 RadMenuIt
我正在使用 MVVM-Light 并且我的中继命令运行良好,我刚刚读到我应该实现 CanExecuteChanged和 CanExecute .虽然我找不到一个很好的例子。 有没有人有一个很好的例子来
我的 Command-ViewModel 中是否缺少某些内容? public class Command : ICommand { public Command(Action
我想实现当文本框值更改时,我的添加按钮可用。 我将文本框与 viewModel 绑定(bind): 我的按钮: 在后面的 XAML 代码中,我将 DataContext 设置为我的 ViewMod
在用户进行一些修改后,我想从 DelegateCommand 重新触发 canExecute 功能。我该怎么做呢? 最佳答案 必须引发接口(interface) ICommand 的事件 CanExe
我给自己写了一个 SingleExecutionCommand(我还不确定那个名字。请随意推荐另一个,但这不是我的问题),它不允许在第一次执行之前再次按下按钮完成的。好吧,至少那是计划。 我想使用 C
我是一名优秀的程序员,十分优秀!