【发布时间】:2013-10-07 18:46:28
【问题描述】:
我正在WPF中学习MVVM。
如果该命令不带对象参数,我将如何将命令绑定到控件?我目前正在使用 RelayCommand 方法,这将不允许我传递没有对象参数的方法/动作,正如 RelayCommand 类中的动作签名所指定的那样。
所以我的问题是,如果我想在不带任何参数的情况下执行命令,我的方法是什么?
【问题讨论】:
-
我们可以看看你的代码吗?
我正在WPF中学习MVVM。
如果该命令不带对象参数,我将如何将命令绑定到控件?我目前正在使用 RelayCommand 方法,这将不允许我传递没有对象参数的方法/动作,正如 RelayCommand 类中的动作签名所指定的那样。
所以我的问题是,如果我想在不带任何参数的情况下执行命令,我的方法是什么?
【问题讨论】:
您可以使用Microsoft Prism 库中包含的DelegateCommand。
此命令允许您定义所需的任何参数类型。
例如
ICommand MyCommand = new DelegateCommand<AnyType>(Execute, CanExecute);
private void Execute(AnyType e) {} private bool CanExecute(AnyType e) { return true; }
或者,你需要的例子:
ICommand MyCommand = new DelegateCommand(Execute, CanExecute);
private void Execute() {} private bool CanExecute() {return true;}
希望,它会有所帮助。
【讨论】:
我自己不使用RelayCommand,更喜欢使用我自己的实现,但我认为它们足够相似,可以回答您的问题:
public ICommand ActivateCommand
{
get { return new RelayCommand(action => Activate(), canExecute => CanActivate()); }
}
这里,CommandParameter 由action 和canExecute 输入参数表示。您必须在此处声明它们,但您没有必须使用它们,如上所示。显然,与所有 lambda 表达式一样,您可以随意称呼它们。
【讨论】: