gpt4 book ai didi

wpf - CommandManager.RequerySuggested 如何工作?

转载 作者:行者123 更新时间:2023-12-03 07:34:10 24 4
gpt4 key购买 nike

MSDN 仅声明

Occurs when the CommandManager detects conditions that might change the ability of a command to execute.

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

最佳答案

我无法准确告诉您 CommandManager 监听哪些事件。不过,我可以告诉您,在将 CommandManager 与异步操作结合使用时,您应该小心。当我在 ICommand 实现中使用 CommandManager 时,我遇到了以下问题:

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

我的解决方案是通过调用 CommandManager.InvalidateRequerySuggested 强制 CommandManager 再次检查 ICommand收到异步操作结果后,立即在我的 ViewModel 中调用该方法。
更新: 请注意,该方法必须在 UI 线程上调用,否则不会有任何效果! (感谢 midspace 的评论)

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com