- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我一直在使用 RelayCommand在这里和那里有点,这让我想知道并想知道...... CommandManager.InvalidateRequerySuggested() 到底是什么时候?被 W
我们从头开始创建了一个新的、相当复杂的 WPF 应用程序,但随着使用 CommandManager 注册的命令数量增加,我们遇到了性能问题。我们在我们的 MVVM 实现中使用了简单的轻量级命令,但是我
我有我的命令 CanExecute 方法仅在 wpf 应用程序启动时调用一次。我希望能够定期重新评估该方法。我发现了一些关于调用 的引用资料CommandManager.InvalidateReque
将“RelayCommand”类(使用CommandManager类)添加到我的Silverlight应用程序后,出现错误: The name 'CommandManager' does not ex
MSDN 仅声明 Occurs when the CommandManager detects conditions that might change the ability of a comman
我目前正在寻求将撤消/重做(基于 this 文章)与使用 ICommand 的命令模式相结合。阅读有关 CanExecute 和 CanExecuteChanged 的想法后,我发现了 Comma
我正在开发 WPF 应用程序,我想在所有这些应用程序中重用相同的类,以便我可以将它们添加为引用。 在我的例子中,我有一个命令类: public class RelayCommand : IComman
我有一个带有“MainView”和一些嵌套 View 的 Catel 应用程序。 嵌套 View 具有 ListView一些项目有 ContextMenu与一些 MenuItems . 在 MainV
短版 调用CommandManager.InvalidateRequerySuggested()生效的时间比我想要的要长得多(在 UI 控件被禁用之前有 1-2 秒的延迟)。 加长版 我有一个系统,我
我有一个使用 CommandBinding 的控件 (WPF),它是这样注册的: CommandBinding binding = new CommandBinding(ApplicationComm
我正在尝试测试一个使用 CommandManager.RequerySuggested 的类,并注意到调用 CommandManager.InvalidateRequerySuggested 不会触发
我开始使用 Metro 风格的应用程序(我知道我们不应该称它为 Metro,但我永远记不起它应该叫什么...),并且我正在实现一个 用于 MVVM 的 DelegateCommand 类。在 WPF
是否可以阻止 WPF CommandManager 执行它附加的 CanExecute 委托(delegate)? 我有一个未处理的异常处理例程,它为用户显示一个错误窗口。我现在遇到的情况是,异常作为
我从 Josh Smith 的 MVVM tutorial 得到以下代码. 任何人都可以快速解释这段代码的实际作用吗? public event EventHandler CanExecuteChan
我正在尝试为我的 MVVM 应用程序实现高度响应的 UI,因此我选择让所有命令处理程序在 BackgroundWorker 中自动执行,这样它们就不会阻塞 UI。 但与此同时,我不希望用户能够在它仍在
我正在制作我自己的一些自定义 ICommand 实现,我看到很多实现都是这样的: public event EventHandler CanExecuteChanged { add { Com
我使用 CommandManager.RegisterClassInputBinding 将绑定(bind)添加到整个类型。现在我想删除它。 这是我测试过的。 private void Command
尝试使用下面的 RelayCommand 类时,我收到了错误消息:“名称“CommandManager”在当前上下文中不存在”。根据这篇文章Class library does not recogni
我给自己写了一个 SingleExecutionCommand(我还不确定那个名字。请随意推荐另一个,但这不是我的问题),它不允许在第一次执行之前再次按下按钮完成的。好吧,至少那是计划。 我想使用 C
我们的 UI 目前有很多控件绑定(bind)到具有一些复杂 CanExecutes 的命令。我们面临的问题是,每当 CommandManager 确定 UI 需要重新评估时,所有命令都会运行它们的 C
我是一名优秀的程序员,十分优秀!