我需要一个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。
答案 0 :(得分:0)
如上所述,我想通了。我不得不将Self
用于RelativeSource
,这就是诀窍。