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 何时决定重新查询命令是不是可以执行?的主要内容,如果未能解决你的问题,请参考以下文章
如何强制 WPF ListView 重新查询其 ItemSsource?