什么取代了WinRT中的CommandManager?

时间:2012-08-19 23:08:20

标签: c# windows-8 windows-runtime icommand

我开始使用Metro风格的应用程序(我知道我们不应该称它为Metro,但我永远不会记得它应该被称为...),而我正在实现{{1用于MVVM的类。在WPF中,DelegateCommand事件通常是这样实现的:

ICommand.CanExecuteChanged

但WinRT中不存在 public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } 类......还有别的东西吗?或者我们应该自己明确地触发这个事件?

2 个答案:

答案 0 :(得分:13)

在WinRT中,您必须手动更新/引发CanExecuteChanged。没有CommandManager可以全局执行此操作。您可以将此视为颈部疼痛,或者由于CanExecute不会被持续调用而导致严重的性能提升。它确实意味着您必须考虑在不必要之前将级联属性更改。但事实就是如此。手册。

public void RaiseCanExecuteChanged()
{
    if (CanExecuteChanged != null)
        CanExecuteChanged(this, EventArgs.Empty);
}

答案 1 :(得分:1)

使用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/