没有 PRISM 的绑定命令

Binding commands without PRISM

自从我开始使用 MVVM 以来,我一直使用 PRISM 的 DelegateCommand class 将视图模型中的命令绑定到视图中的按钮命令。我相信 Telerik 也有 DelegateCommand 的等价物。

我的问题是,是否有内置的替代方案来替代使用 3rd 方框架,例如 prism 和 telerik。如果我正在拼凑一个快速的一次性应用程序,我可能不希望从 NuGet 安装包的麻烦。有没有办法使用 Func 或 Action 或委托来实现同样的事情?

不,您仍然需要一个实现 ICommandCommand class。 但是,你可以很容易地写下你自己的 DelegateCommand分钟):

public class DelegateCommand : ICommand
{
     private Action<object> execute;

     public DelegateCommand(Action<object> executeMethod)
     {
          execute = executeMethod;
     }

     public bool CanExecute(object param)
     {
         return true;
     }

     public void Execute(object param)
     {
         if (execute != null)
             execute(param);
     }
}

使用并享受!如果您想要自定义 CanExecute 行为而不是返回 true,则可以使用额外的 Func<bool, object> 参数。

请注意,如果您 真的 不喜欢 null 作为函数,并且希望它在尝试时抛出,只需使用此构造函数即可:

     public DelegateCommand(Action<object> executeMethod)
     {
          if (executeMethod == null)
              throw new ArgumentNullException("executeMethod");

          execute = executeMethod;
     }