CanExecute Logic for DelegateCommand

Обновление: Фокус стал MVVM вместо фактического вопроса, поэтому я обновляю его.

У меня проблема с CanExecute для DelegateCommand. Он не обновляется до того, как я вызову RaiseCanExecuteChanged, это желаемое поведение?

enter image description here

Я загрузил простой пример проекта, воспроизводящий эту проблему здесь: http://dl.dropbox.com/u/39657172/DelegateCommandProblem.zip

Проблема заключается в следующем, у меня есть две Кнопки, такие как эта. Одна привязывает Command к реализации RelayCommand, а другая привязывает к реализации Prism DelegateCommand

ViewModel ICommands

DelegateSaveCommand = new DelegateCommand(Save, CanSaveDelegate);
RelaySaveCommand = new RelayCommand(param => Save(), param => CanSaveRelay);

и CanExecute метод/предикат

public bool CanSaveDelegate()
{
    return HasChanges;
}
public bool CanSaveRelay
{
    get { return HasChanges; }
}

Обе используют свойство HasChanges. Когда HasChanges обновляется, обновляется только CanSaveRelay. Так и должно быть?

13
задан Fredrik Hedblad 8 September 2011 в 19:33
поделиться

1 ответ

Если Вы хотите придерживаться DelegateCommand, можно использовать ObservesCanExecute:

DelegateSaveCommand = new DelegateCommand(Save, CanSaveDelegate).ObservesCanExecute(CanSaveDelegate);

Примечание, что существует также ObservesProperty доступно, если Вы используете свойство для своей проверки CanExecute. Но затем Ваше свойство должно назвать NotifyPropertyChanged.

0
ответ дан 1 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: