WinRT中替代CommandManager的是什么?

21

我正在开始接触Metro风格应用程序(我知道我们不应该称其为Metro,但我总是记不住应该怎么叫...),并且我正在实现一个DelegateCommand类以便在MVVM中使用。在WPF中,ICommand.CanExecuteChanged事件通常是这样实现的:

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

但是在WinRT中不存在CommandManager类... 难道有其他替代品吗?还是我们应该自己明确地触发此事件?

2个回答

14

在WinRT中,你必须手动更新/触发CanExecuteChanged事件。没有全局的CommandManager来完成这个任务。你可以将其看作是一件烦人的事情,或者是一个严重的性能提升,因为不再不停地调用CanExecute了。这意味着你必须考虑级联属性更改,而之前你不需要考虑。但这就是现实,需要手动操作。

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

谢谢你的回答。这正是我最终自己想出来的。我猜不在WinRT中包括CommandManager有很好的理由,但这意味着我必须改变处理命令的方式... - Thomas Levesque
1
不要假设没有包含CommandManager有一个很好的理由。由于这是WinRT的第一轮,一些选择仅仅是从时间充足的角度考虑而做出的。你知道我是什么意思吗?;) - Jerry Nixon

1

1
“is not necessary” 是什么意思?这是指我应该自己触发事件吗? - Thomas Levesque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接