C# WinRT中的CommandManager由什么替代?

C# WinRT中的CommandManager由什么替代?,c#,windows-8,windows-runtime,icommand,C#,Windows 8,Windows Runtime,Icommand,我开始使用Metro风格的应用程序(我知道我们不应该叫它Metro,但我永远记不起它应该叫什么…),我正在实现一个用于MVVM的DelegateCommand类。在WPF中,ICommand.CanExecuteChanged事件通常是这样实现的: public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remov

我开始使用Metro风格的应用程序(我知道我们不应该叫它Metro,但我永远记不起它应该叫什么…),我正在实现一个用于MVVM的
DelegateCommand
类。在WPF中,
ICommand.CanExecuteChanged
事件通常是这样实现的:

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

但是,
CommandManager
类在WinRT中不存在。。。还有别的事吗?还是我们应该自己显式触发此事件?

对于WPF,您必须按照您所描述的方式实现
ICommand.CanExecuteChanged
。然而,对于Silverlight来说,情况并非如此。见这一相关问题:

我的猜测是,在WinRT中,就像在Silverlight中一样,
CommandManager
是不必要的

请参见此处的相关讨论:


在WinRT中,必须手动更新/提升CanExecuteChanged。没有CommandManager可以全局执行此操作。你可以把这看作是一种痛苦,或者是一种严重的性能提升,因为CanExecute没有经常被调用。这确实意味着您必须考虑在以前不需要的地方进行级联属性更改。但事实就是这样。手册

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

“没有必要”是什么意思?这是否意味着我应该自己提出这个活动?谢谢你的回答。这就是我最终自己发现的。我想在WinRT中不包括CommandManager是有充分理由的,但这意味着我必须改变使用命令的方式……不要认为没有充分理由不包括CommandManager。因为这是WinRT的第一轮,所以我们从“我们是否有足够的时间”的角度做出了一些选择。知道我的意思吗?;)