Wpf 需要更多关于使用多重绑定绑定多个CommandParameters的帮助吗

Wpf 需要更多关于使用多重绑定绑定多个CommandParameters的帮助吗,wpf,data-binding,multibinding,imultivalueconverter,commandparameter,Wpf,Data Binding,Multibinding,Imultivalueconverter,Commandparameter,我需要一个用于ToggleButton的命令处理程序,它可以接受多个参数,即所述ToggleButton的IsChecked属性,以及一个常量值,它可以是字符串、字节、整数。。。没关系 我找到了答案的链接,并阅读了MultiBinding和IMultiValueConverter。在我不得不编写多重绑定之前,它进行得非常顺利,当时我意识到我还需要传递一个常量值,而不能执行类似的操作 <Binding Value="1" /> 然后我遇到了另一个,然后我开始思考我可以绕过这个问题

我需要一个用于ToggleButton的命令处理程序,它可以接受多个参数,即所述ToggleButton的IsChecked属性,以及一个常量值,它可以是字符串、字节、整数。。。没关系

我找到了答案的链接,并阅读了MultiBinding和IMultiValueConverter。在我不得不编写多重绑定之前,它进行得非常顺利,当时我意识到我还需要传递一个常量值,而不能执行类似的操作

<Binding Value="1" />

然后我遇到了另一个,然后我开始思考我可以绕过这个问题的方法

一种可能的方法是不使用MVVM,只需将Tag属性添加到我的ToggleButton,在这种情况下,我的多重绑定如下所示:

<MultiBinding Converter="{StaticResource MyConverter}">
    <MultiBinding.Bindings>
        <Binding Path="IsChecked" />
        <Binding Path="Tag" />
    </MultiBinding.Bindings>
</MultiBinding>

Kent的评论大致是这样的:“如果您使用的是MVVM,您应该能够绕过这个问题”。然而,我不确定这是否是我的选择,即使我已经采用MVVM作为我的WPF模式的必然选择

我之所以这样说,是因为我在UserControl中有多个ToggleButton,每个ToggleButton命令都需要调用相同的函数。但是因为它们是切换按钮,所以我不能在ViewModel中使用绑定到IsChecked的属性,因为我不知道上次单击的是哪一个。我想我可以增加另一个私人财产来跟踪这一点,但这似乎有点愚蠢。就常数而言,如果我有追踪的想法,我可能会摆脱它,但不确定是否有其他方法可以绕过它

这里有人对我有好的建议吗?:)

编辑--好的,我需要更新绑定,但仍然不能正常工作:

    <ToggleButton Tag="1" Command="{Binding MyCommand}" Style="{StaticResource PassFailToggleButtonStyle}" HorizontalContentAlignment="Center" Background="Transparent" BorderBrush="Transparent" BorderThickness="0">
        <ToggleButton.CommandParameter>
            <MultiBinding Converter="{StaticResource MyConverter}">
                <MultiBinding.Bindings>
                    <Binding Path="IsChecked" RelativeSource="{RelativeSource Mode=Self}" />
                    <Binding Path="Tag" RelativeSource="{RelativeSource Mode=Self}" />
                </MultiBinding.Bindings>
            </MultiBinding>
        </ToggleButton.CommandParameter>
    </ToggleButton>


IsChecked正在工作,但没有标记。我刚意识到标签是一个字符串。。。嗯。现在开始工作了!关键是使用一个相对的Self

资源,如上所述,我找到了答案。我必须使用
Self
作为
RelativeSource
,这就成功了。

我上面的绑定是错误的,因为它正在查询VM。任何人都有提示,或者你能推荐一个好的在线“备忘单”来找出数据绑定路径吗?我通常会查看输出窗口中的错误,以查看它绑定到了什么。现在,我想我必须设置RelativeSource属性,但以前从未使用过它。好的,我发现了这个:绑定到常量的可能技巧:使用资源
1
在参考资料部分,然后
{Binding Source=“{StaticResource One}}
。完全没有经过测试。嘿,这是个不错的选择,谢谢!标签对我来说很好用。。。不知道是否有任何形式的性能差异。