Параметры реле освещения MVVM LightCommand
У меня возникла проблема с передачей параметра в команду relaycommand с использованием инфраструктуры GalaSoft MVVM Light. Я знаю, что реализация mvvm light relaycommand не использует лямбда-параметры, поэтому я провел некоторое исследование и нашел способ, которым люди работали вокруг него, делая что-то вроде этого:
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;
}
Однако я продолжаю получать ошибку в строке _projmenuItem_Edit = new RelayCommand(ProjEditNode);
, которая говорит Argument 1: cannot convert from 'method group' to 'System.Action'
Что мне не хватает?
Ответы
Ответ 1
Я считаю, что это сработает:
_projmenuItem_Edit = new RelayCommand<object>((txt)=>ProjEditNode(txt));
- EDIT -
Вам также нужно определить свой RelayCommand с типом:
например.
public RelayCommand<string> myCommand { get; private set; }
myCommand = new RelayCommand<string>((s) => Test(s));
private void Test(string s)
{
throw new NotImplementedException();
}
Ответ 2
Я не думаю, что RelayCommand()
имеет конструктор, который не пуст. вы пытаетесь передать ему неправильный метод.
Если вы хотите, чтобы RelayCommand поддерживал параметры команды, вы должны использовать RelayCommand<T>
, где T может быть любым типом параметра. В вашей ситуации это было бы RelayCommand<String>
, которое принимало бы метод с void (string) сигнатурой. (и поэтому также будет строго напечатан и не будет использовать уродливый объект)
Ответ 3
Еще один способ объявить команды ретрансляции, поможет уменьшить ваш код
public RelayCommand ChartCommand
{
set
{
RelayCommand<string> chartCommand =
new RelayCommand<string>(e => ExecuteChartCommand(e));
}
}
public void ExecuteChartCommand(string vendor)
{
}