2

ボタンの「IsEnabled」をオーバーライドするRelayCommands。

これはバグですか?これが私のビューのxamlと私のViewModelのコードです

<Button Grid.Column="0" Content="Clear" IsEnabled="False" cmd:ButtonBaseExtensions.Command="{Binding ClearCommand}"  />    

public RelayCommand ClearCommand
    {
       get { return new RelayCommand(() => MessageBox.Show("Clear Command")); }
    }

xamlにIsEnabled="False"をハードコーディングしていることに注意してください。この値は完全に無視されます(ボタンは常に有効になっています)。

RelayCommandにCanExecuteオーバーロードがあることに気付きましたが、ボタンを無効にする以上のことをしたいので、これを使用したいと思いました。

4

2 に答える 2

3

それは興味深い点です。そうです、IsEnabled プロパティはオーバーライドされます。CanExecuteデリゲートがコンストラクターで設定されていない場合、IsEnabledプロパティを無視することで改善できると思います...次のバージョンで検討します。

それまでの間、CanExecute デリゲートを使用して、常に false を返すように設定します。

public RelayCommand ClearCommand
{
   get { return new RelayCommand(
       () => MessageBox.Show("Clear Command"),
       () => false); }
}

乾杯、ローラン

于 2010-04-30T12:10:39.580 に答える
1

これが私の実装です...

1) RelayCommand クラスの宣言は次のようになります。

public class RelayCommand : ViewModelBase、ICommand

2) IsEnabled プロパティの実装は次のようになります。

    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            if (value != _isEnabled)
            {
                _isEnabled = value;

                OnPropertyChanged("IsEnabled");
            }
        }
    }

3) 最後に、次のように xaml で IsEnabled プロパティをバインドする必要があります。

IsEnabled="{Binding Path=SearchCommand.IsEnabled}"

于 2011-05-01T19:44:12.050 に答える