2009-03-19 37 views
4

私のウィンドウでロードと保存のボタンがあります。 CommandBindingを使用し、保存ボタンにはCanExecuteプロパティがあり、ユーザーがロード前にデータを保存しないようにします。CanExecute-Resultが変更された後、コントロールが更新されない

CanExecute-Methodeのが私の意図は、データがロードされた後、真canSaveXML =を設定することですが、値は変更をした後にコントロールが更新されない「canSaveXML」

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

と呼ばれる簡単なブール値に接続されています。私はいくつかの読書をして、私はCommandManager.InvalidateRequerySuggestedを呼び出さなければならないことを知った。私は今それを行い、私のコードはこのように見えます。

canSaveXML = true; 
CommandManager.InvalidateRequerySuggested(); 

ただし、コントロール(ボタン)はまだ更新されません。 UI上で何かをトリガーするか、ウィンドウを最小化/最大化するまで、私はまだ無効です。私がした後、ボタンが有効になります。

ここで何が間違っていますか?

MSDNのサンプルでは、​​CommandManager.InvalidateRequerySuggestedがdispatchertimerを使用して何度も呼び出されていますが、これが唯一の解決策であるとは考えられません。

答えて

8

私は自分自身を見つけました。

canSaveXML = true; 
CommandManager.InvalidateRequerySuggested(); 

は、バックグラウンドワーカーのコードです。良くない。 CommandManager.InvalidateRequerySuggested()を呼び出すには、ウィンドウのディスパッチャに指示する必要があります。

+1

ありがとうございました。 –

+0

ありがとうございました。私はRunWorkerCompletedイベントハンドラにCommandManager.InvalidateRequerySuggested()メソッドを追加し、魅力的なように働いていました! – OptimizePrime

関連する問題