C# 使用代码隐藏中的两个自定义命令参数提升ICommand

C# 使用代码隐藏中的两个自定义命令参数提升ICommand,c#,wpf,mvvm,C#,Wpf,Mvvm,我已经在MVVM viewmodel中创建了一个ICommand。这个ICommand每次使用一些参数应用于不同的按钮。具体来说,有两个参数。我想从代码隐藏中调用该命令,并设置这两个命令参数的值 ICommand被称为CustomCommand并接收两个CommandParametersMyString和MyInt i命令和参数 公共类myCommand参数 { 公共int MyInt{get;set;} 公共字符串MyString{get;set;} } 公共ICommand viewTa

我已经在MVVM viewmodel中创建了一个ICommand。这个ICommand每次使用一些参数应用于不同的按钮。具体来说,有两个参数。我想从代码隐藏中调用该命令,并设置这两个命令参数的值


ICommand
被称为
CustomCommand
并接收两个CommandParameters
MyString
MyInt

i命令和参数

公共类myCommand参数
{
公共int MyInt{get;set;}
公共字符串MyString{get;set;}
}
公共ICommand viewTable命令
{
获取{返回新的DelegateCommand(FuncToCall);}
}
公共void FuncToCall(对象参数)
{
var param=(myCommand参数)参数;
Debug.WriteLine($“Name:{param.MyString}和Age:{param.MyInt}”;
}
现在我创建了另一个方法,可以随时调用ICommand。但是每次ICommand都应该为每个CommandParameters获取不同的值。例如

public void raisecommand按钮(按钮名称)
{
ButtonName.Command.Execute(ButtonName.CommandParameter);
}
这就是我在任何时候提升ICommand的方式。但是到目前为止,我只能给出一对CommandParameters。例如,我想做如下的事情

//伪代码-不起作用,但描述了我想要实现的目标
public void raiseCommand按钮(按钮名称)
{
ButtonName.Command.Execute(ButtonName.CommandParameter(MyString:“Nikos”,MyInt:“12”);
//…rest代码
}
为了解决这个问题,我搜索了各种链接,如:


但是这些链接都不能回答我的问题。我非常感谢社区的帮助。

在您的原始代码中,您正在传递您在XAML中声明的
CommandParameter
值。这就是为什么您使用
CommandParameter
属性。但该属性只是一个属性,您可以检索的值。它不是一个可以向其传递参数值的方法

在您发布的代码中,还有一个问题是
字符串的正确分隔符,而不是

似乎您应该能够为您想要给我的每个调用创建一个新的
MyCommandParameter
实例。例如:

public void raisecommand按钮(按钮名称)
{
Execute(新的myCommand参数{Name=“Nikos”,Age=12});
//…代码
//使用不同参数对的Raise命令
Execute(新的myCommand参数{Name=“Alex”,Age=25});
}

请记住,在伪代码版本中,您使用的属性名称与
MyCommandParameter
类的实际声明中显示的属性名称不同。我重用了这些属性名称,而不是原始的
MyString
MyInt
名称。我认为您理解这一区别,并且可以编写彼得非常感谢你的回答。事实上,你的更正点对我来说是清楚的,我知道这些属性
MyString
MyInt
。现在让我把它弄清楚。
Execute()
可以接收一个方法并立即将其转换为CommandParameter。基于我发布的第二个链接,我试图找到一种方法来设置属性
ButtonBase.CommandParameter的值。这就是我丢失它的地方,因此我需要发布一个问题。我最初认为我可以获取、设置属性的值。”我最初认为我可以获取、设置一个属性的值"--可以这样做。但这只会直接影响按钮本身的单击时间。您发布的代码,除了使用按钮来保存
ICommand
及其参数值外,您没有任何操作,因此没有理由将参数值放入
CommandParameter
属性中。您可以调用时直接将其传递给
Execute()
方法。”但这只会直接影响按钮本身的单击时间”--用户应该单击按钮。因此,按钮最终会被单击。我的经验不足,无法找到有效的方法来影响
{set;}
方法的属性。但如果您的方法可以解决我的问题,目前就足够了。我还没有测试代码,但我会这样做。“按钮,是的,最终会被单击”--这不是您问题中的代码显示的内容。您写了“我想从代码背后发出该命令”,这与用户单击按钮的情况完全不同。是否希望在用户单击时执行两次命令,每个参数值执行一次?我发布的答案回答了您提出的问题。如果您有不同的问题,您应该将其作为单独的帖子发布,而不是对此问题进行更改(无论是通过编辑帖子还是在这些注释中)。“是否希望在用户单击时执行两次命令,每个参数值执行一次?”-不。Peter,我可能键入了错误。单击按钮后将执行命令。单击按钮时,绑定到按钮的命令将采用从后面的代码中定义的值对。我坚信您的答案足以回答我的问题。不过,我还没有测试它,因为我需要一些时间进行更改.我会给你留个信的。