WPF 何时决定重新查询命令是不是可以执行?

Posted

技术标签:

【中文标题】WPF 何时决定重新查询命令是不是可以执行?【英文标题】:When does WPF decide to requery commands whether they can execute?WPF 何时决定重新查询命令是否可以执行? 【发布时间】:2012-11-30 10:40:21 【问题描述】:

WPF 何时重新查询命令是否可以执行? 调试器报告它经常发生。 但具体的条件是什么?

【问题讨论】:

我认为这取决于命令的类型。 RelayCommand 通常会在任何属性更改时请求 CanExecuteChanged()(我认为只要在属性更改时运行 CommandManager.InvalidateRequerySuggested),而 DelegateCommand 不会,并且您必须在属性更改时手动提高 CanExecuteChanged依赖于变化。此外,所有命令在绑定时都会重新评估,因此隐藏然后显示窗口之类的操作通常会触发重新查询 关于该主题的更多信息:How does CommandManager.RequerySuggested work? 和 What is the actual task of CanExecuteChanged and CommandManager.RequerySuggested 关于这个主题的好话题在这里:robburke.net/2008/04/… here is a bunch of calls to InvalidateRequerySuggested() @CornelMarian 工作链接:robburke.net/wpf-command-pattern-when-does-it-query-canexecute 【参考方案1】:

它的 TL;DR 版本是当窗口上发生某些输入事件时调用 CanExecute 方法。主要有键盘和鼠标事件。

因此,无论何时有人单击或按下某个键,ALL 命令都会被 CommandManager 无效(通过引发 CommandManager.RequerySuggested 事件)。这就是保持 CanExecute 方法快速的重要原因。

也可以通过创建不使用 CommandManager 处理 CanExecuteChanged 事件的自定义 ICommand 实现来自行处理。

【讨论】:

以上是关于WPF 何时决定重新查询命令是不是可以执行?的主要内容,如果未能解决你的问题,请参考以下文章

何时在查询中使用 dbo 限定表或视图名称?

如何强制 WPF ListView 重新查询其 ItemSsource?

何时在 WPF 中对命令使用事件?

OpenJPA 查询何时执行以及啥是顺序

BigQuery 是不是支持“立即执行”命令来运行动态查询?

如何在 BigQuery 中构建模块化查询?