作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
继续我与静态变量和 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"
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。
DelegateCommand
.我不记得我在哪里找到了原始来源(因为我没有写它),但要先进得多。
关于c# - 绑定(bind)静态命令变量变灰按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42617541/
我是一名优秀的程序员,十分优秀!