我已经在MVVM视图模型中创建了一个ICommand。而且此ICommand每次都使用某些参数应用于不同的按钮。具体来说两个参数。我想从后面的代码中引发该命令,并将值设置为这两个命令参数。
<Button
Content="button 1"
Name="butonn_1"
Command="{Binding CustomCommand}">
<Button.CommandParameter>
<local:MyCommandParameter
MyString="Nick"
MyInt="12"/>
</Button.CommandParameter>
会ICommand
被调用CustomCommand
并接收两个CommandParametersMyString
和MyInt
ICommand和参数
public class MyCommandParameter
{
public int MyInt { get; set; }
public string MyString { get; set; }
}
public ICommand ViewTableCommand
{
get { return new DelegateCommand<object>(FuncToCall); }
}
public void FuncToCall(object parameter)
{
var param = (MyCommandParameter)parameter;
Debug.WriteLine($"Name: {param.MyString} and Age: {param.MyInt}";
}
现在,我创建了另一个方法,可以在需要时调用ICommand。但是每次ICommand应该为每个CommandParameters获得不同的值。例如,
public void RaiseCommandButton(Button ButtonName)
{
ButtonName.Command.Execute(ButtonName.CommandParameter);
}
这就是我想随时提高ICommand的方式。但是到目前为止,我只能给出一对CommandParameters。例如,我想做下面的事情
//Pseudo code - does not work but describes what I want to achieve
public void RaiseCommandButton(Button ButtonName)
{
ButtonName.Command.Execute(ButtonName.CommandParameter(MyString: "Nikos", MyInt:"12");
//...rest code
}
为了解决这个问题,我搜索了各种链接,例如:
但是这些链接都无法回答我的问题。我非常感谢社区的帮助。
在原始代码中,您正在传递CommandParameter
在XAML中声明的值。这就是为什么您使用该CommandParameter
属性。但是,该属性仅是:一个属性,您可以检索其值。这不是您可以将参数值传递给的方法。
在您发布的代码中,还有一个问题"
是string
不是文字的正确分隔符'
。
似乎您应该能够为MyCommandParameter
您想要给我的每个呼叫创建一个新实例。例如:
public void RaiseCommandButton(Button ButtonName)
{
ButtonName.Command.Execute(new MyCommandParameter { Name = "Nikos", Age = 12 });
//...code
//Raise command with different pair of Parameters
ButtonName.Command.Execute(new MyCommandParameter { Name = "Alex", Age = 25 });
}
请记住,在伪代码版本中,使用的属性名称与在类的实际声明中显示的属性名称不同MyCommandParameter
。我已经重用了那些属性名称,而不是原始的MyString
和MyInt
名称。我想您了解这种区别,并且可以使用实际上适合您的实际代码的任何属性名称来编写实际的实现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句