0

複数のパラメーター、つまり、前述のトグルボタンの IsChecked プロパティと、文字列、バイト、整数などの定数値を取ることができるトグルボタンのコマンドハンドラーが必要です...問題ありません。

SOでこの素晴らしい質問を見つけ、回答のリンクをたどって、MultiBindingとIMultiValueConverterを読みました。MultiBinding を書かなければならないまではとてもスムーズに進みました。

<Binding Value="1" />

その後、Kent Boogaart が回答した別の同様の質問に出くわし、これを回避する方法を考え始めました。

考えられる方法の 1 つは、MVVM を使用せず、単に Tag プロパティを ToggleButton に追加することです。この場合、MultiBinding は次のようになります。

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

Kent は、「MVVM を使用している場合は、この問題を回避できるはずです」というコメントを出しています。ただし、必要な選択の WPF パターンとして MVVM を採用したにもかかわらず、それが私にとっての選択肢であるかどうかはわかりません。

私がこれを言う理由は、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 は機能していましたが、Tag は機能していませんでした。Tag が文字列であることに気付きました...当たり前です。それは今働いています!重要なのは、 Selfの RelativeSource を使用することでした。

4

1 に答える 1

0

上で説明したとおり、私はそれを理解しました。Selfforを使用する必要がRelativeSourceあり、それでうまくいきました。

于 2010-05-26T15:37:41.033 に答える