2010-11-29 4 views
6

klicken habe ich eine Schaltfläche, um ein Nach einigen AufgabenButtons sehen deaktiviert, bis ich etwas

<Button Content="Remove" Command="{Binding RemoveCommand}" x:Name="btnRemove" Visibility="Collapsed" /> 

ICommand gebunden ist getan, ich die Taste sichtbar gemacht, mit der Ausnahme, dass sie deaktiviert aussehen bis ich etwas klicken, warum ist das? Die RemoveCommand wie unten sieht

public ICommand RemoveCommand 
{ 
    get 
    { 
     if (_removeCommand == null) 
     { 
      _removeCommand = new RelayCommand(() => 
      { 
       if (RemoveRequested != null) 
        RemoveRequested(this, EventArgs.Empty); 
      },() => 
      { 
       // CanExecute Callback 
       if (Status == WorkStatus.Processing || Status == WorkStatus.Pending) 
       { 
        Debug.WriteLine("Returning False" + Status); return false; 
       } 
       Debug.WriteLine("Returning True"); return true; // After uploads, this returns True, in my Output Window. 
      }); 
     } 
     return _removeCommand; 
    } 

nach Uploads, die CanExecute Rückruf True zurückgibt, so Schaltfläche aktiviert werden soll, aber es sieht deaktiviert, bis ich etwas klicken, warum ist das passiert?

Video of the Problem

Antwort

5

Versuchen CommandManager.InvalidateRequerySuggested().

Diese Methode sollte die CanExecute() auf die Befehle aufrufen, und das sollte die IsEnabled Ihrer Schaltflächen aktualisieren.

Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/system.windows.input.commandmanager.invalidaterequerysuggested.aspx.

+0

Ich habe bereits das im Setzer von Status http://pastebin.com/w6901n06 –

+0

Diese Frage wurde vor einiger Zeit gestellt, aber ich habe das gleiche Problem wie @jiewmeng. Ich rufe InvalidateRequerySuggested() explizit auf, aber es wird immer noch nicht aktualisiert, bis ich eine Fokusänderung vorgenommen habe. Jiewmeng, hast du jemals eine Lösung dafür gefunden? – RustyTheBoyRobot

0

Wenn CommandManager.InvalidateRequerySuggested() nicht die Arbeit macht, versuchen, den Fokus auf der Steuerung zwingt die Tasten an der sachgemäßen Zeit, die (MouseEnter-, Loaded ...):

//void ParentControl_MouseEnter(object sender, MouseEventArgs e) 
void ParentControl_Loaded(object sender, RoutedEventArgs e) 
{ 
    this.Focusable = true; 
    this.Focus(); 
} 

Es ist vielleicht nicht die eleganteste Lösung aber hat für mich gearbeitet.

Verwandte Themen