MSDN仅声明



但是我似乎找不到任何关于它如何工作的痕迹,我应该注意/避免的事情...
它只是听输入吗? (即:鼠标移动,按键按下等)

最佳答案

我无法确切告诉您CommandManager监听什么事件。但是,我可以告诉您,在将CommandManager与异步操作结合使用时,您应该对保持谨慎。在CommandManager实现中使用ICommand时遇到以下问题:

我有一个绑定(bind)到ICommand的按钮,它触发了一个异步操作,该操作增加了一个值。现在,如果值已达到特定限制,则应禁用按钮/ ICommand(即其CanExecute()方法应返回false)。问题是:单击按钮并开始异步操作后,CommandManager调用了我的CanExecute()方法。这个异步操作花了很长时间,但是足够长的时间才能在CommandManager进行检查之后得到结果,因此CanExecute()中的限制检查是使用旧值完成的。因此,尽管实际上已达到限制,但该按钮保持启用状态。有趣的是,在用户界面中单击任意位置后,该按钮现在被禁用,因为CommandManager再次检查了ICommand,现在根据限制检查了新值。
实际上,我认为CommandManager在按钮单击后等待了约50ms,直到它执行了ICommand的检查,但我对此不太确定。

我的解决方案是在收到异步操作的结果后立即通过在ViewModel中调用 CommandManager 方法来强制ICommand再次检查CommandManager.InvalidateRequerySuggested更新:请注意,必须在UI线程上调用此方法,否则它将无效! (感谢中部空间的评论)

关于wpf - CommandManager.RequerySuggested如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2763630/

10-10 03:55