没有 PRISM 的绑定命令
Binding commands without PRISM
自从我开始使用 MVVM 以来,我一直使用 PRISM 的 DelegateCommand class 将视图模型中的命令绑定到视图中的按钮命令。我相信 Telerik 也有 DelegateCommand 的等价物。
我的问题是,是否有内置的替代方案来替代使用 3rd 方框架,例如 prism 和 telerik。如果我正在拼凑一个快速的一次性应用程序,我可能不希望从 NuGet 安装包的麻烦。有没有办法使用 Func 或 Action 或委托来实现同样的事情?
不,您仍然需要一个实现 ICommand
的 Command
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;
}
自从我开始使用 MVVM 以来,我一直使用 PRISM 的 DelegateCommand class 将视图模型中的命令绑定到视图中的按钮命令。我相信 Telerik 也有 DelegateCommand 的等价物。
我的问题是,是否有内置的替代方案来替代使用 3rd 方框架,例如 prism 和 telerik。如果我正在拼凑一个快速的一次性应用程序,我可能不希望从 NuGet 安装包的麻烦。有没有办法使用 Func 或 Action 或委托来实现同样的事情?
不,您仍然需要一个实现 ICommand
的 Command
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;
}