example commandmanager c# wpf mvvm-light relaycommand

c# - commandmanager wpf example



MVVM Light RelayCommand ParĂ¡metros (3)

Tengo un problema con pasar un parámetro a un comando de relé usando el marco de 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é una forma en que la gente trabajó en torno a esto 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<object>((txt)=>ProjEditNode(txt));

- EDITAR -

Tendrá que definir su RelayCommand con el tipo también:

p.ej

public RelayCommand<string> myCommand { get; private set; } myCommand = new RelayCommand<string>((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 método equivocado.

Si desea que RelayCommand admita los parámetros de comando, debe usar RelayCommand<T> donde T puede ser cualquier tipo de parámetro. En su situación, sería RelayCommand<String> que aceptaría un método con firma nula (cadena). (y por lo tanto también serí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<string> chartCommand = new RelayCommand<string>(e => ExecuteChartCommand(e)); } } public void ExecuteChartCommand(string vendor) { }