2013-02-25 4 views
6

RelayCommand CanExecute行動

<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は唯一私が再サイズUI確認し、その場で更新されません。 値を変更するたびに更新されない理由は何ですか?

答えて

15

CommandManagerも参照も参照コマンドがLogContent_simulationObject.Connectedに依存するため、これらのプロパティが変更されたとき、それは自動的にCanExecuteを再評価することができないことを知る方法がありません。

CommandManager.InvalidateRequerySuggestedを呼び出して明示的に再評価をリクエストすることができます。 の場合はCanExecute、すべての場合はコマンドを再評価します。 1つだけを更新したい場合は、StartProductionCommand.RaiseCanExecuteChangedを呼び出して、コマンド自体にCanExecuteChangedイベントを発生させる必要があります。

+0

これを使用する方法の例またはリンクを教えてください。私はあなたがこれをどこと呼ぶのですか? – batmaci

+1

@batmaciの場合、コマンドの 'CanExecute'を再評価したいときに' CommandManager.InvalidateRequerySuggested'を呼び出すだけです –

関連する問題