使用RelayCommand WPF将不同的命令参数传递给同一命令

时间:2013-10-24 18:09:17

标签: c# wpf mvvm relaycommand commandparameter

所以,我在这里尝试实现的是使用相同的命令来执行一些不同类型的代码。我希望区分我想要执行的代码的方式可以使用命令参数来完成。当我不得不使用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时,是否有某种方法可以使用该命令参数?

如果您需要更多信息或代码,请直接询问。

1 个答案:

答案 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);