【发布时间】:2011-11-13 03:08:37
【问题描述】:
更新:焦点变成了 MVVM 而不是实际的问题,所以我正在更新它。
我对@987654323@ 的DelegateCommand 有疑问。在我调用 RaiseCanExecuteChanged 之前它没有更新,这是期望的行为吗?
我在这里上传了一个简单的示例项目来重现这个问题:http://dl.dropbox.com/u/39657172/DelegateCommandProblem.zip
问题是这样的,我有两个这样的Buttons。一种是将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 更新。这就是它的本意吗?
【问题讨论】:
-
+1 因为我对 PRISM 也有同样的问题...我实际上使用 MVVM Light 的
RelayCommand而不是 PRISM 的DelegateCommand。我在某处看到一篇关于重新编译 Prism 的库以添加 CanExecuteChanged 事件的文章,但我现在找不到它(无论如何都认为是 PRISM 2) -
@Meleak:关于您的问题可能是什么,我做了 2 种不同的猜测,但如果没有看到更多代码,我不可能确切知道原因是什么。
-
@Rachel:您可能正在和 Meleak 做同样的事情,所以请参考我的解决方案以了解为什么以及如何解决它。
-
@Meleak:另外,如果问题是您的模型正在更改属性并引发 propertychanged 事件,那么实际上是谁在更改 State 属性?
-
@m-y:PropertyChanged 由实体引发,而实体又从数据库生成。我正在阅读你的答案
标签: c# wpf entity-framework command prism