WPF UI样式在命令执行后部分冻结在错误的状态

问题描述

| 有一天,另一个问题。老实说,如果这一切停止,那会很无聊,不是吗? 编辑:似乎所有的背景信息已过时。这是精简版: 我的Command类使用CommandManagers RequerySuggested事件(如此处所述:WPF自定义ICommand实现和CanExecuteChanged事件)来装配CanExecuteChanged。
public abstract class CommandBase : ICommand
{
    public abstract void Execute(object parameter);
    public abstract bool CanExecute(object parameter);
    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
}
在我的情况下,CommandManager无法建议重新查询在某些情况下会很重要。现在,我必须绕过它,并强制它重新查询。有人知道怎么做这个吗? 另一个编辑:我现在已经尝试了很多事情(更改命令逻辑,删除控件模板和样式),并且仍然陷入困境。不过,我无法在孤立的沙箱场景中重现该问题。我真的认为我在这里遇到了一个bug,因为Button的行为与其外观不一致,即使将Style归结为以下内容
<Style targettype=\"{x:Type Button}\" x:Key=\"CertificateActionButton\">
    <Setter Property=\"Background\" Value=\"{DynamicResource CertificateActionButtonBackground}\"/>
    <Setter Property=\"BorderThickness\" Value=\"0\"/>
    <Style.Triggers>
        <Trigger Property=\"IsEnabled\" Value=\"False\">
            <Setter Property=\"Background\" Value=\"LightGray\"/>
        </Trigger>
    </Style.Triggers>
</Style>
当我取消聚焦然后再次将窗口聚焦时,将恢复连贯性-该按钮看起来仍然处于非活动状态。 更新:由于无法重现此问题,因此我关闭了此问题。 它收到的唯一答案是一个很好的答案,但是在对问题进行了多次编辑之后,q和a似乎不再相关。     

解决方法

        您可以尝试从此处致电
CommandManager.InvalidateRequerySuggested()
。   CommandManager只关注   在确定的某些条件下   当命令目标已更改时,   例如更改键盘焦点。在   CommandManager的情况   不能充分确定   条件变化导致   命令无法执行,   InvalidateRequerySuggested可以是   调用以强制CommandManager   引发RequerySuggested事件。 同样从注释中:   请注意,如果您是   使用异步调用,然后   CommandManager.InvalidateRequerySuggested()   应该从主线程中调用   因为任何命令监听器都会打开   UI线程。 (使用分派器并调用CheckAccess())     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...