在WPF中传递多个参数,包括Type到ViewModel

时间:2015-10-14 06:12:27

标签: c# wpf xaml imultivalueconverter

如何将两个参数从XAML,一个Type对象和一个Model {Binding}传递给ViewModel作为CommandParameter。我在SO上发现了不同的帖子,但都使用了控件绑定。有没有办法传递Type。

我想要这样的事情:

<MenuItem x:Key="RuleBase" Header="RuleBase" x:Shared="False" 
    Command="{Binding DataContext.AddRuleCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}">
    <MenuItem.CommandParameter>
        <MultiBinding Converter="{StaticResource MultiParameterConverter}">
            <Binding Path="{Binding}" />
            <Binding Path="{x:Type local:RuleBase}" />
        </MultiBinding>
    </MenuItem.CommandParameter>
</MenuItem>

这段代码单独使用一个参数:

<MenuItem x:Key="RuleBase" Header="RuleBase" x:Shared="False" 
    Command="{Binding DataContext.AddRuleCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
    CommandParameter="{x:Type local:RuleBase}" />

2 个答案:

答案 0 :(得分:2)

你可以在multibinding中使用这个绑定:

<MultiBinding Converter="{StaticResource MultiParameterConverter}">
    <Binding />
    <Binding Source="{x:Type local:RuleBase}" />
</MultiBinding>    

但由于Type不会改变,并且multibinding表达式中只有一个真正的绑定,它可以像这样重写:

<MenuItem CommandParameter="{Binding ConverterParameter={x:Type local:RuleBase}, 
                                     Converter={StaticResource YourConverter}}" />

答案 1 :(得分:-1)

尝试将整个MenuItem作为命令参数传递:

CommandParameter="{Binding RelativeSource={RelativeSource Self}}"

您必须使用可以获取参数的ICommand实现。