J'ai un problème avec le passage d'un paramètre à une commande relay à l'aide du framework GalaSoft MVVM Light. Je sais que l'implémentation de relaycommand par mvvm light n'utilise pas de paramètres lambda, j'ai donc fait des recherches et trouvé un moyen de contourner ce problème en faisant quelque chose comme ceci:
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;
}
Cependant, je reçois toujours une erreur sur la ligne _projmenuItem_Edit = new RelayCommand(ProjEditNode);
qui dit Argument 1: cannot convert from 'method group' to 'System.Action'
Qu'est-ce que je rate?
Je crois que cela fonctionnera:
_projmenuItem_Edit = new RelayCommand<object>((txt)=>ProjEditNode(txt));
-- MODIFIER --
Vous devrez également définir votre RelayCommand avec le type:
par exemple.
public RelayCommand<string> myCommand { get; private set; }
myCommand = new RelayCommand<string>((s) => Test(s));
private void Test(string s)
{
throw new NotImplementedException();
}
Je ne pense pas que RelayCommand()
ait un constructeur qui n'est pas vide. vous essayez de lui passer le mauvais type de méthode.
Si vous souhaitez que RelayCommand prenne en charge les paramètres de commande, vous devez utiliser RelayCommand<T>
où T peut être n'importe quel type de paramètre. Dans votre situation, ce serait RelayCommand<String>
qui accepterait une méthode avec une signature vide (chaîne). (et à cet effet serait également fortement typé et n'utilisera pas l'objet laid)
Une autre façon de déclarer les commandes de relais vous aidera à réduire votre code
public RelayCommand ChartCommand
{
set
{
RelayCommand<string> chartCommand =
new RelayCommand<string>(e => ExecuteChartCommand(e));
}
}
public void ExecuteChartCommand(string vendor)
{
}