RelayCommands переопределяет «IsEnabled» моих кнопок - PullRequest
2 голосов
/ 28 апреля 2010

Команды Relay, переопределяющие «IsEnabled» моих кнопок.

Это ошибка? Вот xaml из моего View и код из моей 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")); }
    }

Обратите внимание, что я жестко закодировал IsEnabled = "False" в моем xaml. Это значение полностью игнорируется (кнопка всегда включена).

Я понимаю, что RelayCommand имеет перегрузку CanExecute, но я действительно хотел использовать это, так как хочу сделать больше, чем просто отключить кнопку.

Ответы [ 2 ]

3 голосов
/ 30 апреля 2010

Это интересный момент. Вы правы, свойство IsEnabled переопределяется. Я полагаю, что улучшение могло бы заключаться в игнорировании свойства IsEnabled, если в конструкторе не установлен делегат CanExecute ... Я рассмотрю его в следующей версии.

Тем временем используйте делегат CanExecute и установите его так, чтобы он всегда возвращал значение false.

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

Cheers, Laurent

1 голос
/ 01 мая 2011

Вот моя реализация ...

1) Объявление класса RelayCommand может быть следующим:

открытый класс RelayCommand: ViewModelBase, ICommand

2) Реализация свойства IsEnabledможет быть следующим:

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

                OnPropertyChanged("IsEnabled");
            }
        }
    }

3) Наконец, вам необходимо связать свойство IsEnabled в xaml следующим образом:

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

...