2013-02-25 106 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檢查,只有當我重新大小的用戶界面,而不是更新的飛行。 任何想法爲什麼它不會每次更改值時更新?

回答

15

CommandManager不可能知道的命令取決於LogContent_simulationObject.Connected的方式,所以它不能自動重新評估CanExecute當這些屬性改變。

可以明確調用CommandManager.InvalidateRequerySuggested申請重新評估。請注意,它將重新評估CanExecute全部命令;如果只想刷新一個,則需要通過調用StartProductionCommand.RaiseCanExecuteChanged來提高命令本身的CanExecuteChanged事件。

+0

你能舉一個例子或者帖子鏈接怎麼用這個嗎?我的意思是你在哪裏叫這個? – batmaci 2016-06-23 14:34:47

+1

@batmaci,當你想要重新評估命令的CanExecute時,你只需調用'CommandManager.InvalidateRequerySuggested' – 2016-06-23 14:57:40

相關問題