7

我有以下命令:

<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 大小且未即时更新时才检查。知道为什么每次更改值时都不更新吗?

4

2 回答 2

16

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

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

于 2013-02-25T11:29:28.893 回答
0

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

命令状态不会经常刷新。

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

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

另请参阅刷新 WPF 命令

于 2013-02-25T11:29:05.000 回答