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;
}

CanStartProductionUIのサイズを変更した場合にのみチェックされ、その場で更新されません。値を変更するたびに更新されない理由はありますか?

4

2 に答える 2

16

はコマンドがおよびにCommandManager依存していることを知る方法がないため、これらのプロパティが変更されたときに自動的に再評価することはできません。LogContent_simulationObject.ConnectedCanExecute

を呼び出して、再評価を明示的に要求できますCommandManager.InvalidateRequerySuggestedすべてのコマンドCanExecuteに対して再評価されることに注意してください。1 つだけを更新する場合は、 を呼び出して、コマンド自体でイベントを発生させる必要があります。CanExecuteChangedStartProductionCommand.RaiseCanExecuteChanged

于 2013-02-25T11:29:28.893 に答える
0

たとえば、PropertyChanged イベントハンドラーで RaiseCanExecuteChanged を呼び出すことができます。

コマンドの状態が頻繁に更新されるわけではありません。

少し前に、それについての良い記事を読みました。後で投稿します。

http://joshsmithonwpf.wordpress.com/2008/06/17/allowing-commandmanager-to-query-your-icommand-objects/も参照してください。

Refresh WPF コマンドも参照してください。

于 2013-02-25T11:29:05.000 に答える