什么取代了WinRT中的CommandManager?

Tho*_*que 20 c# icommand windows-8 windows-runtime

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

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
Run Code Online (Sandbox Code Playgroud)

但是这个CommandManager类在WinRT中不存在......还有别的东西吗?或者我们是否应该自己明确触发此事件?

Jer*_*xon 13

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

public void RaiseCanExecuteChanged()
{
    if (CanExecuteChanged != null)
        CanExecuteChanged(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)