RelayCommand CanExecute behavior

本文关键字:behavior CanExecute RelayCommand | 更新日期: 2023-09-27 18:01:03

我有以下命令:

<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大小时才被选中,而不是动态更新。知道为什么每次他们更改值时都不更新吗?

RelayCommand CanExecute behavior

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

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

您可以在例如PropertyChanged事件处理程序中调用RaiseCanExecuteChanged。

命令状态不会经常刷新。

不久前,我读了一篇关于它的好文章。我稍后会发布它。

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

另请参阅刷新WPF命令