私のウィンドウには、ロードおよび保存メソッドのボタンがあります。私は 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 がディスパッチャータイマーで何度も呼び出されますが、それが唯一の解決策になるとは信じていません。