5

在我的窗口中,我有加载和保存方法的按钮。我使用 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 一次又一次地使用调度程序计时器调用,但我拒绝相信这将是唯一的解决方案。

4

1 回答 1

9

好吧,我自己发现了。

canSaveXML = true;
CommandManager.InvalidateRequerySuggested();

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

于 2009-03-20T12:53:29.027 回答