WPF如何使用CommandManager(CommandManager.InvalidateRequerySuggested)确定何时无效?

时间:2011-10-05 15:19:41

标签: c# wpf icommand relaycommand

我在这里和那里一直在使用RelayCommand,这让我想知道并且想知道......当CommandManager.InvalidateRequerySuggested()确实被WPF调用时?

我的猜测是每次触发UI上的任何其他路由事件时触发,这在MVVM世界中主要意味着何时引发OnPropertyChanged事件,导致值发生更改,从而导致执行某些相关的routedevent。但是,这只是猜测,我想知道是否有人知道这里的确切内部运作。

1 个答案:

答案 0 :(得分:2)

我知道有几个原因:

  • 键盘焦点发生变化时。

  • 执行命令后。

  • 控件可以在其他情况下(例如,当您在TextBox中按键时)认为必要时调用此项。

单独进行财产更改通常不是失效的原因(我猜是出于性能原因)。

可悲的是,我在MSDN中找不到任何关于此的文档。我在这里发布的是基于我在Pro WPF in C# 2010(伟大的书籍BTW)中找到的内容。

此外,它不是失效的CommandManager。 CommandManager仅发送一个事件(使用命令订阅控件),以便他们可以更新其启用/禁用状态。