2013-02-25 12 views
6

ich folgenden Befehl haben:RelayCommand CanExecute Verhalten

<Button x:Name="bOpenConnection" Content="Start Production" 
     Grid.Row="0" Grid.Column="0" 
     Height="30" Width="120" Margin="10" 
     HorizontalAlignment="Left" VerticalAlignment="Top" 
     Command="{Binding Path=StartProductionCommand}"/> 

StartProductionCommand = new RelayCommand(OpenConnection, CanStartProduction); 

private bool CanStartProduction() 
{ 
    return LogContent != null && !_simulationObject.Connected; 
} 

CanStartProduction wird nur überprüft, wenn ich die Größe neu die Benutzeroberfläche und nicht im laufenden Betrieb aktualisiert. Eine Idee, warum es nicht jedes Mal aktualisiert wird, wenn sie die Werte ändern?

Antwort

15

Die CommandManager hat keine Möglichkeit zu wissen, dass der Befehl hängt von LogContent und _simulationObject.Connected, so kann es nicht neu zu bewerten CanExecute sehen, wenn diese Eigenschaften ändern.

Sie können eine Neubewertung explizit anfordern, indem Sie CommandManager.InvalidateRequerySuggested aufrufen. Beachten Sie, dass CanExecute für alle Befehle erneut ausgewertet wird; Wenn Sie nur einen aktualisieren möchten, müssen Sie das Ereignis CanExecuteChanged auf dem Befehl selbst auslösen, indem Sie StartProductionCommand.RaiseCanExecuteChanged aufrufen.

+0

können Sie ein Beispiel oder einen Post-Link geben, wie Sie dies bitte verwenden? Ich meine, wo nennst du das? – batmaci

+1

@batmaci, rufen Sie einfach 'CommandManager.InvalidateRequerySuggested' auf, wenn Sie den Befehl' CanExecute' Ihres Befehls erneut auswerten möchten –

Verwandte Themen