2013-02-25 9 views
6

Mam następujące polecenia:RelayCommand CanExecute zachowanie

<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 jest sprawdzane tylko wtedy, gdy ponownie rozmiar UI i nie są aktualizowane na bieżąco. Każdy pomysł, dlaczego nie jest aktualizowany za każdym razem, gdy zmieniają wartości?

Odpowiedz

15

CommandManager nie ma możliwości dowiedzenia się, że komenda zależy LogContent i _simulationObject.Connected, więc nie może przewartościowania CanExecute automatycznie, gdy właściwości te zmiany.

Możesz wyraźnie zażądać ponownej wyceny, dzwoniąc pod numer CommandManager.InvalidateRequerySuggested. Zwróć uwagę, że spowoduje to ponowną analizę CanExecute dla wszystkich poleceń; jeśli chcesz odświeżyć tylko jedno, musisz podnieść zdarzenie CanExecuteChanged w samym poleceniu, wywołując StartProductionCommand.RaiseCanExecuteChanged.

+0

Czy możesz podać przykładowy lub link do tego, jak tego użyć? Mam na myśli, gdzie to nazywasz? – batmaci

+1

@ batmaci, po prostu wywołasz komendę "CommandManager.InvalidateRequerySuggested", jeśli chcesz ponownie przetestować 'CanExecute' twojego polecenia –

Powiązane problemy