Mor*_*fee 4 wpf mvvm canexecute
我有一个非常简单的按钮绑定到命令
<Button Content="Add" Margin="10,10,10,0" Command="{Binding SaveCommand}" ></Button>
Run Code Online (Sandbox Code Playgroud)
我的命令代码
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);
}
Run Code Online (Sandbox Code Playgroud)
代码有效地阻止命令运行基于CanExecuteSaveCommand但是按钮永远不会被禁用,有没有办法实现这一点?
Gaz*_*yer 11
ICommand.CanExecute()WPF会在认为命令可用性可能已更改时自动调用.这通常倾向于用户活动,例如键盘事件,焦点事件等.
由于您的命令可用性完全基于时间而变化,因此WPF无法猜测它是否已更改.相反,你需要通过调用给它一个提示CommandManager.InvalidateRequerySuggested();
由于命令可用性每秒都会发生变化,因此您需要设置一个计时器以至少每秒调用此函数.
请注意,虽然这InvalidateRequerySuggested()是最简单的解决方案,但它会导致WPF重新评估所有命令的可用性.如果这是性能问题,您可以CanExecuteChanged在ICommand实例上引发事件.
| 归档时间: |
|
| 查看次数: |
2335 次 |
| 最近记录: |