Reputation: 2274
I'm having an issue with passing a parameter to a relaycommand using the GalaSoft MVVM Light framework. I know that mvvm light's implementation of relaycommand doesn't use lambda parameters, so I did some research and found a way that people worked around it by doing something like this:
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;
}
However, I keep getting an error on the line _projmenuItem_Edit = new RelayCommand(ProjEditNode);
that says Argument 1: cannot convert from 'method group' to 'System.Action'
What am I missing?
Upvotes: 45
Views: 58444
Reputation: 303
Another way to declare relay commands, will help to reduce your code
public RelayCommand ChartCommand
{
set
{
RelayCommand<string> chartCommand =
new RelayCommand<string>(e => ExecuteChartCommand(e));
}
}
public void ExecuteChartCommand(string vendor)
{
}
Upvotes: 2
Reputation: 23157
I believe this will work:
_projmenuItem_Edit = new RelayCommand<object>((txt)=>ProjEditNode(txt));
-- EDIT --
You'll need to define your RelayCommand with the type as well:
e.g.
public RelayCommand<string> myCommand { get; private set; }
myCommand = new RelayCommand<string>((s) => Test(s));
private void Test(string s)
{
throw new NotImplementedException();
}
Upvotes: 90
Reputation: 7591
I don't think that RelayCommand()
has a constructor that is not empty. you're trying to pass the wrong kind of method to it.
If you want the RelayCommand to support Command Parameters, you should use RelayCommand<T>
where T can be any type of parameter. In your situation it would be RelayCommand<String>
which would accept a method with void(string) signature. (and therefor would also be strongly typed and won't use the ugly object)
Upvotes: 4