5

私のウィンドウには、ロードおよび保存メソッドのボタンがあります。私は CommandBinding を使用しており、保存ボタンには CanExecute プロパティがあり、ユーザーがデータをロードする前に保存しないようにしています。

CanExecute-Methode は、「canSaveXML」と呼ばれる単純な bool 値に接続されています。

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 に答える