ビューモデルの列挙プロパティを、ビューのラジオボタンのセットとして表現しようとしています。ここまでは順調ですね; 私はそれを双方向で表現することができますMultiBinding
:
(rb1.IsChecked、rb2.IsChecked、rb3.IsChecked)<-> vm.Value
ここで使用されるマルチバインディングは、(bool, bool, bool) <-> MyValue
;間で変換するマルチコンバーターを備えています。明らかに、タイプの(3つの)許容値の1つは、に基づいMyValue
て選択され、その逆も同様です。bool
true
ただし、これはすでに少し不便です。マルチバインディングは単一の値の側から定義する必要があるため、ビューのXamlでそのバインディングを定義することはできません。したがって、コードビハインドでマルチバインディングを定義SetBinding
し、ビューモデルのValue
プロパティでsetを使用する必要があります。
さて、私が立ち往生している問題は、ラジオボタンの1つのセットをその値にバインドするだけでなく、2つをバインドしていることです。したがって、私のバインディングは次のようになります。
(rbA1.IsChecked、rbA2.IsChecked、rbA3.IsChecked)<-> vm.Value <->(rbB1.IsChecked、rbB2.IsChecked、rbB3.IsChecked)
SetBinding
問題は、一度に複数のバインディングを接続するために使用できないことvm.Value
です。
私がこれまでに試した解決策は次のとおりです。
- 1つの大きなマルチバインディングを使用して、一度にすべてのラジオボタンにバインドします。これは、フォームのバインドを意味し
(rbA1.IsChecked, rbA2.IsChecked, rbA3.IsChecked, rbB1.IsChecked, rbB2.IsChecked, rbB3.IsChecked) <-> vm.Value
ます。このソリューションの問題は、ラジオボタンの1つ(たとえば)がチェックされている場合、 (チェックされていない)または(チェックされている)が「新しい正しい」値rbB2
を持っているかどうかを判断する方法がないことです。rbA2
rbB2
- 最初に、 1つのプロパティのみを公開するラジオグループコントロールを定義して、ラジオボタングループを抽象化し
SelectedIndex
ます。このプロパティは、ラジオグループコントロールvm.Value
のすべてのインスタンスからプロパティに便利にバインドできます。実行可能ですが、新しい制御クラスを作成する必要があり、これがWPFでの唯一の方法であるかどうか疑問に思います。 - あるラジオボタンのセットを別のラジオボタンにバインドする:、、などに双方向でバインド
rbB1
しrbA1
、ラジオボタンの最初のセットとの間でのみマルチバインドを使用するとrbB2
、目的の効果が得られますが、 「マスターラジオグループ」を持つという概念は好きではありません。データ転送のためにGUI要素を悪用することになります。rbA2
vm.Value
- コードビハインドですべてを実行し、ラジオボタンとビューモデル値を手動で更新します。もちろん、これは実行可能なフォールバックソリューションですが、これはXaml /バインディングを使用して実行可能であると思われます。