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) { }