Обновление: Фокус стал MVVM вместо фактического вопроса, поэтому я обновляю его.
У меня проблема с CanExecute
для DelegateCommand
. Он не обновляется до того, как я вызову RaiseCanExecuteChanged
, это желаемое поведение?
Я загрузил простой пример проекта, воспроизводящий эту проблему здесь: 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
. Так и должно быть?
Если Вы хотите придерживаться DelegateCommand
, можно использовать ObservesCanExecute
:
DelegateSaveCommand = new DelegateCommand(Save, CanSaveDelegate).ObservesCanExecute(CanSaveDelegate);
Примечание, что существует также ObservesProperty
доступно, если Вы используете свойство для своей проверки CanExecute. Но затем Ваше свойство должно назвать NotifyPropertyChanged.