RelayCommand CanExecute行为

时间:2013-02-25 11:25:56

标签: c# wpf mvvm mvvm-light

我有以下命令:

<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;
}
仅当我重新调整UI大小并且未动态更新时,才会检查

CanStartProduction。 知道为什么每次更改值都没有更新吗?

2 个答案:

答案 0 :(得分:16)

CommandManager无法知道该命令取决于LogContent_simulationObject.Connected,因此当这些属性发生变化时,它无法自动重新评估CanExecute

您可以通过调用CommandManager.InvalidateRequerySuggested明确请求重新评估。请注意,它会为所有命令重新评估CanExecute;如果您只想刷新一个,则需要通过调用CanExecuteChanged在命令本身上引发StartProductionCommand.RaiseCanExecuteChanged事件。

答案 1 :(得分:0)

您可以在例如PropertyChanged Eventhandler中调用RaiseCanExecuteChanged。

命令状态不会经常刷新。

前段时间我读了一篇关于它的好文章。我稍后会发布。

另见http://joshsmithonwpf.wordpress.com/2008/06/17/allowing-commandmanager-to-query-your-icommand-objects/

另见Refresh WPF Command