我有以下命令:
<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才会被选中。你知道为什么他们每次改变值时都不更新吗?
发布于 2013-02-25 19:29:29
CommandManager无法知道命令依赖于LogContent和_simulationObject.Connected,因此当这些属性更改时,它不能自动重新计算CanExecute。
您可以通过调用CommandManager.InvalidateRequerySuggested显式地请求重新评估。请注意,它将重新计算所有命令的CanExecute;如果只想刷新一个命令,则需要通过调用StartProductionCommand.RaiseCanExecuteChanged在命令本身上引发CanExecuteChanged事件。
发布于 2013-02-25 19:29:05
例如,您可以在PropertyChanged Eventhandler中调用RaiseCanExecuteChanged。
命令状态不会经常刷新。
不久前,我读到了一篇关于它的好文章。我稍后会把它贴出来。
另请参阅http://joshsmithonwpf.wordpress.com/2008/06/17/allowing-commandmanager-to-query-your-icommand-objects/
https://stackoverflow.com/questions/15065885
复制相似问题