我开始使用Metro风格的应用程序(我知道我们不应该叫它Metro,但我从来不记得它应该叫什么……),我正在实现一个在MVVM中使用的DelegateCommand
类。在WPF中,ICommand.CanExecuteChanged
事件通常是这样实现的:
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
但是WinRT中不存在CommandManager
类...有没有别的东西可以代替?或者我们应该自己显式地触发这个事件?
发布于 2012-09-25 23:51:54
在WinRT中,您必须手动更新/提升CanExecuteChanged。在全球范围内没有CommandManager可以做到这一点。您可能会认为这是一个令人头疼的问题,或者是一个严重的性能提升,因为CanExecute不是经常被调用的。这意味着您必须考虑层叠属性更改,而以前您不必这样做。但事实就是这样。手册。
public void RaiseCanExecuteChanged()
{
if (CanExecuteChanged != null)
CanExecuteChanged(this, EventArgs.Empty);
}
发布于 2012-08-20 19:25:34
在使用WPF时,必须按照您所描述的那样实现ICommand.CanExecuteChanged
。然而,对于Silverlight来说,情况并非如此。请参阅此相关问题:
WPF CommandParameter binding not updating
我的猜测是在WinRT中,就像在Silverlight中一样,CommandManager
是不必要的。
请参阅此处的相关讨论:
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/477cdd19-ee88-4746-97fe-59b8dbd44e0a/
https://stackoverflow.com/questions/12030697
复制相似问题