MVVM Light RelayCommand参数

我有一个使用GalaSoft MVVM Light框架传递参数到relaycommand的问题。 我知道mvvm light的relaycommand实现不使用lambda参数,所以我做了一些研究,并find了一种方法,人们通过这样做来解决这个问题:

public RelayCommand ProjMenuItem_Edit { get { if (_projmenuItem_Edit == null) { //This should work.... _projmenuItem_Edit = new RelayCommand(ProjEditNode); } return _projmenuItem_Edit; } } private void ProjEditNode(object newText) { var str = newText as string; OrganLocationViewModel sel = ProjectOrganLocationView.GetExtendedTreeView().GetTopNode(); //Console.WriteLine(sel.OrganDisplayName); sel.OrganDisplayName = str; } 

但是,我不断收到一个错误_projmenuItem_Edit = new RelayCommand(ProjEditNode);Argument 1: cannot convert from 'method group' to 'System.Action'

我错过了什么?

我相信这将起作用:

 _projmenuItem_Edit = new RelayCommand<object>((txt)=>ProjEditNode(txt)); 

– 编辑 –

你需要用types来定义你的RelayCommand:

例如

 public RelayCommand<string> myCommand { get; private set; } myCommand = new RelayCommand<string>((s) => Test(s)); private void Test(string s) { throw new NotImplementedException(); } 

我不认为RelayCommand()有一个非空的构造函数。 你试图把错误的方法传递给它。

如果您希望RelayCommand支持命令参数,则应使用RelayCommand<T> ,其中T可以是任何types的参数。 在你的情况下,它将是RelayCommand<String> ,它将接受一个带有void(string)签名的方法。 (因此也是强types的,不会使用丑陋的对象)

另一种声明中继命令的方法,将有助于减less你的代码

 public RelayCommand ChartCommand { set { RelayCommand<string> chartCommand = new RelayCommand<string>(e => ExecuteChartCommand(e)); } } public void ExecuteChartCommand(string vendor) { }