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/