1

如何将 XAML 中的两个参数(一个 Type 对象和一个 Model {Binding})作为 CommandParameter 传递给 ViewModel。我在 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}" />
4

2 回答 2

2

您可以在多重绑定中使用此绑定:

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

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

<MenuItem CommandParameter="{Binding ConverterParameter={x:Type local:RuleBase}, 
                                     Converter={StaticResource YourConverter}}" />
于 2015-10-14T06:54:17.470 回答
-1

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

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

您必须使用可以接受参数的 ICommand 实现。

于 2015-10-14T07:16:53.433 回答