【问题标题】:Proper implementation of CanExecuteChangedCanExecuteChanged 的​​正确实现
【发布时间】:2017-08-31 10:05:34
【问题描述】:

我有一个包含多个Buttons 和同样多Commands 的视图。对于每个Command,我想我必须实现ICommand。我的程序将包含一个状态机,因此命令的 CanExecute 可能会更改运行时。 CanExecuteChanged的唯一实现示例是this

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

但是here 据说这个实现是一个糟糕的解决方案。应该使用RaiseCanExecuteChanged()

但是我找不到CanExecuteChangedRaiseCanExecuteChanged 的正确实现。 Here我找到了一个基本的例子,但是用户声明了它

是一个非常简单的实现(可能偶尔会抛出 NullReferenceException)

我更喜欢不时抛出异常的代码。有人有更好的例子吗?

【问题讨论】:

    标签: wpf icommand


    【解决方案1】:

    您只需要一个ICommand 接口的实现。

    您可以看看RelayCommand 类是如何在MvvmLight 中实现的,这是一个流行但轻量级的 MVVM 库:https://github.com/lbugnion/mvvmlight/blob/master/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(PCL)/Command/RelayCommand.cs

    它有一个RaiseCanExecuteChanged() 方法,可以简单地引发CanExecuteChanged 事件。每当您想“刷新”命令时,都应该调用此方法。

    您甚至可以下载MvvmLight 程序集并直接在您的应用程序中使用RelayCommand 类:https://www.nuget.org/packages/MvvmLight/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-17
      • 2010-10-05
      • 2010-10-15
      • 2018-02-10
      • 2011-10-18
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多