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