【问题标题】:Control does not refresh after CanExecute-Result does changeCanExecute-Result 更改后控件不刷新
【发布时间】:2009-03-19 14:59:45
【问题描述】:

在我的窗口中,我有用于加载和保存方法的按钮。我使用 CommandBinding 并且保存按钮具有 CanExecute 属性,以防止用户在加载数据之前保存数据。

CanExecute-Methode 连接到一个名为“canSaveXML”的简单布尔值

private void Save_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    if (canSaveXML == false)
    {
        e.CanExecute = false;
    }
    else
    {
        e.CanExecute = true;
    }
    e.Handled = true;
} 

我的意图是在加载数据后设置 canSaveXML = true 但在值发生更改后控件不会刷新。我做了一些阅读,发现我必须调用 CommandManager.InvalidateRequerySuggested。我现在这样做了,我的代码看起来像这样。

canSaveXML = true;
CommandManager.InvalidateRequerySuggested();

但是控件(按钮)仍然没有刷新。在我触发 UI 上的任何内容或最小化/最大化窗口之前,我仍然处于禁用状态。在我这样做之后,按钮被启用。

这里有什么问题?

在 MSDN 示例中,CommandManager.InvalidateRequerySuggested 一次又一次地使用调度程序计时器调用,但我不相信这是唯一的解决方案。

【问题讨论】:

    标签: c# wpf commandbinding


    【解决方案1】:

    好吧,我自己发现了。

    canSaveXML = true;
    CommandManager.InvalidateRequerySuggested();
    

    是后台工作人员中的代码。不好。您必须告诉窗口的调度程序调用 CommandManager.InvalidateRequerySuggested();

    【讨论】:

    • 谢谢,你省了我很多麻烦。
    • 感谢您的回答。我在 RunWorkerCompleted 事件处理程序中添加了 CommandManager.InvalidateRequerySuggested() 方法,效果非常好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2017-08-02
    • 1970-01-01
    • 2011-12-07
    • 2014-05-26
    • 2016-05-07
    相关资源
    最近更新 更多