2013-02-25 18 views
6

:RelayCommand CanExecute davranış

<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 sadece ben yeniden boy UI kontrol edilip anında güncellenmektedir değildir. Değerleri her değiştirdiğinde neden güncellenmediği hakkında bir fikrin var mı?

cevap

15

CommandManager bkz komut LogContent ve _simulationObject.Connected bağlı olduğunu bilmenin bir yolu vardır bakın, bu nedenle bu özellikler değiştiğinde otomatik CanExecute yeniden değerlendirmek mümkün değil.

CommandManager.InvalidateRequerySuggested numaralı telefonu arayarak yeniden değerlendirme talebinde bulunabilirsiniz. 'un tüm komutları için yeniden değerlendirileceğini unutmayın; Yalnızca bir tane yenilemek isterseniz, StartProductionCommand.RaiseCanExecuteChanged numaralı telefonu arayarak CanExecuteChanged olayını komut üzerinde kendiniz yükseltmeniz gerekir.

+0

Bunu nasıl kullanacağınıza dair bir örnek veya posta linki verebilir misiniz? Bunu nerede diyorsun? – batmaci

+1

@batmaci, komutunuzun 'CanExecute' komutunun yeniden değerlendirilmesini istediğinizde sadece' CommandManager.InvalidateRequerySuggested' olarak adlandırılır. –