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

Я загрузил простой пример проекта, воспроизводящий эту проблему здесь: http://dl.dropbox.com/u/39657172/DelegateCommandProblem.zip
Проблема в том, что у меня есть два Buttons как это. Один из них - привязка Command к реализации RelayCommand, а другая привязка к реализации Prism DelegateCommand
<Button Command="{Binding DelegateSaveCommand}"/>
<Button Command="{Binding RelaySaveCommand}"/>
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. Так оно и должно быть?