gpt4 book ai didi

wpf - ICommand 不使用 CanExecute 更新按钮上的 IsEnabled

转载 作者:行者123 更新时间:2023-12-04 22:20:44 25 4
gpt4 key购买 nike

我有一个绑定(bind)到命令的非常简单的按钮

    <Button Content="Add" Margin="10,10,10,0" Command="{Binding SaveCommand}" ></Button>

我的命令代码
    public ICommand SaveCommand
{
get;
internal set;
}

private bool CanExecuteSaveCommand()
{
return DateTime.Now.Second % 2 == 0;
}

private void CreateSaveCommand()
{
SaveCommand = new DelegateCommand(param => this.SaveExecute(), param => CanExecuteSaveCommand());
}

public void SaveExecute()
{
PharmacyItem newItem = new PharmacyItem();
newItem.Name = ItemToAdd.Name;
newItem.IsleNumber = ItemToAdd.IsleNumber;
newItem.ExpDate = ItemToAdd.ExpDate;
PI.Add(newItem);
}

该代码有效地阻止了基于 CanExecuteSaveCommand 运行的命令,但该按钮永远不会被禁用,有没有办法实现这一点?

最佳答案

ICommand.CanExecute()当 WPF 认为命令可用性可能已更改时,它会自动调用。这通常倾向于用户事件,例如键盘事件、焦点事件等。

由于您的命令可用性完全基于时间而改变,因此 WPF 无法猜测它已经改变。相反,您需要通过调用 CommandManager.InvalidateRequerySuggested(); 给它一个提示。

由于您的命令可用性每秒都在变化,因此您需要设置一个计时器以至少每秒调用一次此函数。

请注意,尽管 InvalidateRequerySuggested()是最简单的解决方案,它将导致 WPF 重新评估所有命令的可用性。如果这是性能问题,您可以提出 CanExecuteChanged您的 ICommand 上的事件而是实例。

关于wpf - ICommand 不使用 CanExecute 更新按钮上的 IsEnabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23555590/

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