MVVM Light RelayCommand Parameters

Sto riscontrando un problema con il passaggio di un parametro a un relaycommand utilizzando il framework GalaSoft MVVM Light. So che l’implementazione di relaycommand di mvvm light non utilizza parametri lambda, quindi ho fatto delle ricerche e ho trovato un modo in cui le persone ci hanno lavorato attorno facendo qualcosa del genere:

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

Tuttavia, continuo a ricevere un errore sulla riga _projmenuItem_Edit = new RelayCommand(ProjEditNode); che dice Argument 1: cannot convert from 'method group' to 'System.Action'

Cosa mi manca?

Credo che funzionerà:

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

— MODIFICARE —

Dovrai definire anche RelayCommand con il tipo:

per esempio

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

Non credo che RelayCommand() abbia un costruttore che non è vuoto. stai cercando di passare il tipo di metodo sbagliato ad esso.

Se vuoi che RelayCommand supporti i parametri di comando, dovresti usare RelayCommand dove T può essere qualsiasi tipo di parametro. Nella tua situazione sarebbe RelayCommand che accetta un metodo con firma void (stringa). (e quindi sarebbe anche fortemente scritto e non userà l’object brutto)

Un altro modo per dichiarare i comandi di inoltro, aiuterà a ridurre il codice

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