gpt4 book ai didi

c# - 绑定(bind)静态命令变量变灰按钮?

转载 作者:行者123 更新时间:2023-12-03 11:03:31 26 4
gpt4 key购买 nike

继续我与静态变量和 XAML 的斗争,我无法解决使按钮变灰的命令绑定(bind)。

View 模型中的代码:

public static ICommand CancelCalender => _cancelCalender
?? (_cancelCalender = new CommandHandler(CancelCalender_Button, _canExecute));


public class CommandHandler : ICommand
{
private Action _action;
private bool _canExecute;
public CommandHandler(Action action, bool canExecute)
{
_action = action;
_canExecute = canExecute;
}

public bool CanExecute(object parameter)
{
return _canExecute;
}

public event EventHandler CanExecuteChanged;

public void Execute(object parameter)
{
_action();
}
}

引用资料,
xmlns:viewModels="clr-namespace:StaffShiftManager.ViewModels"

这些是我尝试绑定(bind)命令变量的方式:
Command="{x:Static viewModels:ViewModelBase.CancelCalender}"


Command="viewModels:ViewModelBase.CancelCalender"


Command="{Binding Source={x:Static viewModels:ViewModelBase.CancelCalender}}"

有什么我想念的吗?任何帮助将不胜感激。

最佳答案

基本上在 ICommand CanExecute()方法,这将返回命令是否启用\可以执行。

返回 false来自 CanExecute()将禁用(灰色)按钮。

现在我稍微修改了您的代码以提供 Func<bool>作为 CanExecute()处理程序。这里会发生的是每次重新查询命令执行时,它都会执行你的canExecute。方法。

public class CommandHandler : ICommand
{
public CommandHandler(Action execute)
:this(execute, null)
{
}

public CommandHandler(Action execute, Func<bool> canExecute)
{
if (execute == null)
throw new ArgumentNullException(nameof(execute));

_executeHandler = execute;
_canExecuteHandler = canExecute ?? (() => true);
}


Func<bool> _canExecuteHandler = () => true;
Action _executeHandler;

public event EventHandler CanExecuteChanged;

public bool CanExecute(object parameter)
{
return _canExecuteHandler();
}

public void Execute(object parameter)
{
_executeHandler?.Invoke();
}
}

不是 canExecute 的默认实现方法是返回 true .甚至传递一个空值 Func到构造函数仍然会导致 true。

再添加一件事,我最喜欢的命令绑定(bind)器之一(比上面更高级)正在使用 DelegateCommand .我不记得我在哪里找到了原始来源(因为我没有写它),但要先进得多。

关于c# - 绑定(bind)静态命令变量变灰按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42617541/

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