Parámetros de comando de relé de luz MVVM

Tengo un problema al pasar un parámetro a un comando de retransmisión usando el marco GalaSoft MVVM Light. Sé que la implementación de mvvm light de relaycommand no usa parámetros lambda, así que investigué un poco y encontré la manera en que las personas trabajaban en torno a él haciendo algo como esto:

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; } 

Sin embargo, sigo recibiendo un error en la línea _projmenuItem_Edit = new RelayCommand(ProjEditNode); que dice Argument 1: cannot convert from 'method group' to 'System.Action'

¿Qué me estoy perdiendo?

Creo que esto funcionará:

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

– EDITAR –

Deberá definir su RelayCommand con el tipo también:

p.ej

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

No creo que RelayCommand() tenga un constructor que no esté vacío. estás tratando de pasarle el tipo de método equivocado.

Si desea que RelayCommand admita parámetros de comando, debe usar RelayCommand donde T puede ser cualquier tipo de parámetro. En su situación, sería RelayCommand que aceptaría un método con la firma void (string). (y, por lo tanto, también estaría fuertemente tipado y no usará el objeto feo)

Otra forma de declarar comandos de retransmisión, ayudará a reducir su código

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