gpt4 book ai didi

c# - 如何以编程方式提高CanExecuteChanged()?

转载 作者:行者123 更新时间:2023-12-03 10:25:47 25 4
gpt4 key购买 nike

我需要以编程方式提高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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com