可以动态重新定义ICommand的CanExecute方法吗?

时间:2010-03-09 15:23:05

标签: .net wpf data-binding code-injection

我一直无法找到关于此的任何信息,这似乎是在SO上解决我的ast unanswered question的唯一方法。但是,我认为现在这应该是一个单独的问题。

我想知道是否有办法动态重新定义ICommand派生类的CanExecute方法。我还是.NET的新手,也许这很明显,但是我还没弄清楚。以前有人在这里做过这种事吗?如果我能使这个工作,它对我的​​特定问题非常有用。基本上,我希望能够遍历ICommands列表并强制所有的CanExecute方法通过用不同的方法替换它们的实现来返回true。

从搜索“.NET代码替换”之类的东西,我找到this article,但我希望有一个稍微简单的方法。但是,如果必须,我会这样做。

1 个答案:

答案 0 :(得分:2)

让您的ICommand派生类调用委托以确定是否可以执行CanExecute,这样您就可以为委托公开setter并在运行时更改它

举个简单的例子:

public class MyCommand : ICommand
{
  private Func<object, bool> _canExecuteMethod;

  public void SetCanExecuteMethod(Func<object, bool> canExecuteMethod)
  {
    //check delegate not null if need be
    _canExecuteMethod = canExecuteMethod;
  }

  public bool CanExecute(object parameter)
  {
    //check for null delegate - maybe return false if it's null....
    return _canExecuteMethod(parameter);
  }

  //....other codefor ICommand

}

如果您不需要额外的数据来做出决定,您也可以仅使用Func<bool>代表。如果需要,代理也可以在其他地方公开,只需从ICommand类中调用