【发布时间】:2015-01-12 22:36:05
【问题描述】:
我们的 UI 目前有很多控件绑定到带有一些复杂 CanExecutes 的命令。我们面临的问题是,每当CommandManager 确定需要重新评估 UI 时,所有命令都会运行它们的CanExecute,这反过来又会对特定场景造成相当大的性能影响。
阅读这篇文章:How does CommandManager.RequerySuggested work?
似乎CommandManager 将重新评估简单的按键、鼠标移动事件等。有没有办法防止这种情况发生,而是让命令管理器在手动调用时重新评估?
【问题讨论】:
-
我不认为你可以。
CanExecute不应包含任何复杂的功能。也许您可以创建一个 bool 变量来告诉您它是否可以执行,并在条件发生变化时更改此变量? -
你什么时候/在哪里调用它?
-
@Dzyann,一个好的场景是当一个特定事件完成运行(或被引发),然后让所有命令“重新评估”
-
我会保留所有内容,并在导致问题的特定位置添加额外的验证。考虑到将来更改 CommandManager 的默认行为可能会导致各种问题。一个不知情的程序员在某些地方添加逻辑并且永远不会被解雇。我想只有代码的某些部分会导致性能问题。
标签: c# wpf xaml relaycommand