Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM灯光继电器命令参数_C#_Wpf_Mvvm Light_Relaycommand - Fatal编程技术网

C# MVVM灯光继电器命令参数

C# MVVM灯光继电器命令参数,c#,wpf,mvvm-light,relaycommand,C#,Wpf,Mvvm Light,Relaycommand,我在使用GalaSoft MVVM Light框架向relaycommand传递参数时遇到问题。我知道mvvm light的relaycommand实现没有使用lambda参数,所以我做了一些研究,发现了一种方法,人们可以通过这样做来解决这个问题: public RelayCommand ProjMenuItem_Edit { get { if (_projmenuItem_Edit == null) { //This sh

我在使用GalaSoft MVVM Light框架向relaycommand传递参数时遇到问题。我知道mvvm light的relaycommand实现没有使用lambda参数,所以我做了一些研究,发现了一种方法,人们可以通过这样做来解决这个问题:

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;
}
但是,我在
\u projmenuItem\u Edit=newrelaycommand(ProjEditNode)行中不断收到一个错误表示
参数1:无法从“方法组”转换为“系统.操作”


我错过了什么

我相信这会奏效:

_projmenuItem_Edit = new RelayCommand<object>((txt)=>ProjEditNode(txt));
\u projmenuItem\u Edit=newrelaycommand((txt)=>ProjEditNode(txt));
--编辑--

您还需要使用以下类型定义RelayCommand:

e、 g

public RelayCommand myCommand{get;private set;}
myCommand=新的RelayCommand((s)=>测试);
专用无效测试(字符串s)
{
抛出新的NotImplementedException();
}

我认为
RelayCommand()
的构造函数不是空的。你试图把错误的方法传给它


如果希望RelayCommand支持命令参数,则应使用
RelayCommand
,其中T可以是任何类型的参数。在您的情况下,它将是
RelayCommand
,它将接受带有void(string)签名的方法。(因此也是强类型的,不会使用丑陋的对象)

另一种声明中继命令的方法将有助于减少代码

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

public void ExecuteChartCommand(string vendor)
{

}
public RelayCommand chart命令
{
设置
{
RelayCommand chartCommand=
新的RelayCommand(e=>ExecuteChartCommand(e));
}
}
public void executechart命令(字符串供应商)
{
}

我以前见过,也尝试过,但GalaSoft的RelayCommand似乎不包含RelayCommand实现?尝试RelayCommand时出现此错误:无法将类型“GalaSoft.MvvmLight.Command.RelayCommand”隐式转换为“GalaSoft.MvvmLight.Command.RelayCommand.RelayCommand”Gah,我尝试编辑,但已太晚。。。忽略前面的评论,我忘了将_projmenuItem_Edit也更改为RelayCommand类型:pI也更新了答案,适用于遇到此问题的任何其他人。:)一个(不重要的)注意事项-new RelayCommand((txt)=>ProjEditNode(txt))可以是new RelayCommand(ProjEditNode)-.NET知道如何解析该方法以及传递给它的参数。方法组也应该工作:myCommand=new RelayCommand(Test);
public RelayCommand ChartCommand
{
    set
    {
        RelayCommand<string> chartCommand = 
            new RelayCommand<string>(e => ExecuteChartCommand(e));               
    }
}

public void ExecuteChartCommand(string vendor)
{

}