我一直在这里和那里使用RelayCommand,这让我想知道并想知道... CommandManager.InvalidateRequerySuggested()
WPF 何时调用该函数?
我的猜测是每次触发 UI 上的任何其他路由事件时,这在 MVVM 世界中主要意味着当引发 OnPropertyChanged 事件时,导致值发生变化,从而导致一些相关的 routedevent 执行。但是,这只是一个猜测,我想知道是否有人知道这里的确切内部工作原理。
我一直在这里和那里使用RelayCommand,这让我想知道并想知道... CommandManager.InvalidateRequerySuggested()
WPF 何时调用该函数?
我的猜测是每次触发 UI 上的任何其他路由事件时,这在 MVVM 世界中主要意味着当引发 OnPropertyChanged 事件时,导致值发生变化,从而导致一些相关的 routedevent 执行。但是,这只是一个猜测,我想知道是否有人知道这里的确切内部工作原理。
我知道有几个原因:
当键盘焦点改变时。
执行命令后。
控件可以在其他情况下认为必要时调用它(例如,当您在 TextBox 中按下某个键时)。
单独的属性更改通常不是失效的原因(我猜是出于性能原因)。
遗憾的是,我未能在 MSDN 中找到任何有关此的文档。我在这里发布的内容基于我在 C# 2010 的 Pro WPF 中找到的内容(BTW 很棒的书)。
此外,它不是无效的 CommandManager。CommandManager 仅发送一个事件(使用命令的控件订阅该事件),因此它们可以更新其启用/禁用状态。