所以,我在这里尝试实现的是使用相同的命令来执行一些不同类型的代码。我希望区分我想要执行的代码的方式可以使用命令参数来完成。当我不得不使用RelayCommand时,我只是不知道如何以我想要的方式做到这一点。
这意味着,我有两个不同的按钮,它们都使用相同的命令,只是使用不同的命令参数。
到目前为止,这是我的XAML:
<RibbonButton SmallImageSource="../Images/whatever.png" Label="Attribute" Command="{Binding AddItemToNodeCommand}" CommandParameter="Attribute"/>
<RibbonButton SmallImageSource="../Images/whatever.png" Label="Method" Command="{Binding AddItemToNodeCommand}" CommandParameter="Method" />
这就是我在ViewModel中的内容:
public ICommand AddItemToNodeCommand { get; private set; }
当然:
AddItemToNodeCommand = new RelayCommand(AddItemToNode);
在调用relayCommand时,是否有某种方法可以使用该命令参数?
如果您需要更多信息或代码,请直接询问。
答案 0 :(得分:2)
您可以使用lambda表达式来访问CommandParameter
...试试这个:
AddItemToNodeCommand = new RelayCommand(parameter => AddItemToNode(parameter));
请注意(与所有lambda表达式一样),此处的名称parameter
可以是任何东西......这可以是相同的:
AddItemToNodeCommand = new RelayCommand(p => AddItemToNode(p));
这是因为我们只是在=>
之前为它设置输入参数名称。
更新&gt;&gt;&gt;
你试过这样吗?:
AddItemToNodeCommand = new RelayCommand<object>(parameter => AddItemToNode(parameter));
最后一个选项就是以与开始时相同的方式调用它:
AddItemToNodeCommand = new RelayCommand(AddItemToNode);