【问题标题】:What replaces CommandManager in WinRT?WinRT 中的 CommandManager 由什么替代?
【发布时间】:2012-08-15 08:56:03
【问题描述】:

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

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

但是CommandManager 类在 WinRT 中不存在...还有别的东西吗?还是我们应该自己显式触发这个事件?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。这就是我最终自己想出来的。我想在 WinRT 中不包括 CommandManager 是有充分理由的,但这意味着我必须改变使用命令的方式...
    • 不要认为有充分的理由不包括 CommandManager。由于这是 WinRT 的第一轮,因此仅从我们是否有足够时间的角度做出了一些选择。明白我的意思了吗? ;)
    【解决方案2】:

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

    【讨论】:

    • “没有必要”是什么意思?这是否意味着我应该自己发起活动?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多