マルチバインディングを使用して複数のコマンドパラメーターを結合する際に追加のヘルプが必要です
-
24-09-2019 - |
質問
複数のパラメーター、つまりSAID ToggleButtonのISCheckedプロパティと、文字列、BYTE、INTである可能性がある一定の値とともに、複数のパラメーターを取得できるコマンドハンドラーが必要です。
私は見つけました この素晴らしい質問 回答のリンクに従って、マルチバインディングとImultivalueConverterを読み上げました。マルチバインディングを書かなければならないまで、それは本当にスムーズに進みました。
<Binding Value="1" />
それから私は別のものに出会いました Kent Boogaartが答えた同様の質問, 、それから私はこれを回避できる方法について考え始めました。
考えられる方法の1つは、MVVMを使用せず、タグプロパティをToggleButtonに追加するだけです。その場合、マルチバインディングは次のようになります。
<MultiBinding Converter="{StaticResource MyConverter}">
<MultiBinding.Bindings>
<Binding Path="IsChecked" />
<Binding Path="Tag" />
</MultiBinding.Bindings>
</MultiBinding>
ケントは、「MVVMを使用している場合は、この問題を回避できるはずです」という線に沿ってコメントしていました。しかし、MVVMをWPFパターンとして採用しているにもかかわらず、それが私にとってオプションであるかどうかはわかりません。 必要性 選択。
私がこれを言う理由は、私がusercontrolに複数のトグルバットンを持っているからであり、各トグルブタンのコマンドのそれぞれが同じ関数を呼び出す必要があるからです。しかし、それらはトグルブタンであるため、最後にクリックされたものがわからないため、ビューモデルに登録されたプロパティを使用することはできません。私はこれを追跡するために別の私有財産を追加できると思いますが、それは少しばかげているようです。定数に関する限り、追跡のアイデアを行った場合、おそらくこれを取り除くことができますが、それを回避する他の方法がわかりません。
誰かがここで私に良い提案をしていますか? :)
編集 - わかりました、だから私は私のバインディングを更新する必要がありますが、それでもまったく正しく機能しません:
<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は機能していましたが、タグではありませんでした。タグが文字列であることに気付きました... duh。今は機能しています!重要なのは、親RelativeSourceを使用することでした 自己.
解決
上で説明したように、私はそれを理解しました。私は使わなければなりませんでした Self
為に RelativeSource
そして、それはトリックをしました。