更新:由于关注点转移到了MVVM而不是实际问题,因此我正在更新它。
我在DelegateCommand
的CanExecute
中遇到了一个问题。在调用RaiseCanExecuteChanged
之前,它不会更新,这是期望的行为吗?
我上传了一个简单的示例项目来重现这个问题: http://dl.dropbox.com/u/39657172/DelegateCommandProblem.zip
问题是这样的,我有两个像这样的按钮
。一个将Command
绑定到RelayCommand
实现,另一个将其绑定到DelegateCommand
的Prism实现。
<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
会更新。这是预期的行为吗?
RelayCommand
而不是 PRISM 的DelegateCommand
。我曾经在某个地方看到过一篇关于重新编译 Prism 库以添加 CanExecuteChanged 事件的文章,但现在找不到了(可能是 PRISM 2)。 - Rachel