使用MultiBinding绑定多个CommandParameter需要其他帮助

时间:2010-01-29 21:37:15

标签: wpf data-binding multibinding imultivalueconverter commandparameter

我需要一个ToggleButton的命令处理程序,它可以接受多个参数,即所述ToggleButton的IsChecked属性,以及一个常量值,可以是字符串,byte,int ......无所谓。

我找到this great question on SO并按照答案的链接阅读MultiBinding和IMultiValueConverter。它非常顺利,直到我必须编写MultiBinding,当我意识到我还需要传递一个常量值并且不能做类似的事情

<Binding Value="1" />

然后我遇到了另一个similar question that Kent Boogaart answered,然后我开始思考如何解决这个问题。

一种可能的方法是不使用MVVM并简单地将Tag属性添加到我的ToggleButton,在这种情况下,我的MultiBinding看起来像这样:

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

肯特已经发表评论,“如果你使用MVVM,你应该能够解决这个问题”。但是,我不确定这是我的选择,即使我已经采用MVVM作为我的WPF模式必要选择。

我说这个的原因是我在UserControl中有多个ToggleButton,而每个ToggleButtons的命令都需要调用相同的函数。但由于它们是ToggleButtons,我不能在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正在运行,但不是Tag。我刚刚意识到Tag是一个字符串......呃。它现在正在工作!关键是要使用 Self 的RelativeSource。

1 个答案:

答案 0 :(得分:0)

如上所述,我想通了。我不得不将Self用于RelativeSource,这就是诀窍。