In meinem Fenster habe ich Schaltflächen für Lade- und Speichermethoden. Ich verwende CommandBinding und die Speichern-Schaltfläche hat eine CanExecute-Eigenschaft, um den Benutzer davon abzuhalten, die Daten zu speichern, bevor sie geladen sind.
Die CanExecute-Methode ist mit einem einfachen boolschen Wert namens "canSaveXML" verbunden
private void Save_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
if (canSaveXML == false)
{
e.CanExecute = false;
}
else
{
e.CanExecute = true;
}
e.Handled = true;
}
Meine Absicht ist es, canSaveXML = true zu setzen, nachdem die Daten geladen wurden, aber das Steuerelement wird nicht aktualisiert, nachdem sich der Wert geändert hat. Ich habe etwas gelesen und herausgefunden, dass ich CommandManager.InvalidateRequerySuggested aufrufen muss. Ich tue das jetzt und mein Code sieht wie folgt aus.
canSaveXML = true;
CommandManager.InvalidateRequerySuggested();
Aber das Steuerelement (die Schaltfläche) wird immer noch nicht aktualisiert. Es ist immer noch deaktiviert, bis ich etwas auf der Benutzeroberfläche auslöse oder das Fenster minimieren/maximieren. Nachdem ich das getan habe, ist die Schaltfläche aktiviert.
Was ist hier falsch?
In einem MSDN-Beispiel wird CommandManager.InvalidateRequerySuggested immer wieder mit einem Dispatchertimer aufgerufen, aber ich weigere mich zu glauben, dass das die einzige Lösung wäre.