Включить DelegateCommand - PullRequest
       3

Включить DelegateCommand

0 голосов
/ 01 февраля 2012

Немного озадачен

Если у меня есть кнопка в окне wpf и она привязана к DelegateCommand

<Button Grid.Row="1"  Content="Remove" Command="{Binding CommandDelete }" />

И в моей простой модели представления я прилагаю

CommandDelete = new DelegateCommand<string>(OnDeleteExecute, OnDeleteCanExecute);

Если кнопка должна быть включена, когда я выбираю элемент из списка, я могу связать выбранный элемент списка со свойством в моей модели просмотра

Report selectedReport;
            public Report SelectedReport
            {
                get { return this.selectedReport ;}
                set { this.selectedReport = value;}
            }
private bool OnDeleteCanExecute(string commandParameter)
            {
                return (this.selectedReport != null);
            }

Пока это нормально, и единственное, чего не хватает, это вызвать событие CanExecute для определенной кнопки в установщике для SelectedReport

CommandDelete.RaiseCanExecuteChanged();

Это работает, но мой вопрос: если у меня есть кнопка 10, нужно ли мне вызывать RaiseCanExecuteChanged для каждой кнопки каждый раз, когда элемент выбран или есть более умный способ

1 Ответ

1 голос
/ 01 февраля 2012

Обычно я помещаю свой RaiseCanExecuteChanged() в событие PropertyChanged для этого класса.

Например, если DeleteCommand.CanExecute основано на свойстве SelectedReport, я подключусь к PropertyChanged событие ViewModel и повышение события CanExecuteChanged в любое время SelectedReport изменения.

void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "SelectedReport")
        DeleteCommand.RaiseCanExecuteChanged();
}

Это сохраняет всю логику в одном центральном месте и гарантирует, что CanExecuteChanged поднимается при каждомизменения параметров.

Другой альтернативой является переключение с использования DelegateCommand на RelayCommand, что автоматически увеличивает его CanExecuteChanged при изменении свойства.Я предположил бы, что есть разница в производительности, однако никогда не замечал ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...