データベースに、「Is XXXX?」タイプのチェックボックスを 1 つ使用して UI で説明するのが難しいバイナリ フィールドがあります。ラジオ ボタンのペアを使用したいのですが (例: "Do it the Foo way" と "Do it the Bar way")、現在、フォームの他のすべてのフィールドはビジネス オブジェクトにデータ バインドされています。ラジオ ボタンのペアをビジネス オブジェクトにもデータ バインドしたいのですが、まだ良い方法が思い浮かびません。ボタンの 1 つをフィールドにバインドして、ボタンが選択されている場合はフィールドが「true」に設定されますが、他のボタンを選択すると最初のボタンが選択解除されます (つまり、2 つのラジオ ボタンが適切にペアになっています)。 )、フィールドの値はこれを反映して更新されません。
言えるようになりたい
button1.DataBindings.Add(new Binding("checked", source, "useFoo"));
button2.DataBindings.Add(new Binding("checked", source, "!useFoo"));
しかし、実行するとスローされると確信しています。もっと簡単な方法はありますか、それとも単一のチェックボックスをどのように表現するかについてもっと考えるべきですか? この些細なことを処理するために余分な関数を追加したくありません...
ETA: コメント投稿者は、ドロップダウン (ComboBox) を検討することを提案しました。私はこれについて考えていましたが、それをデータベースのブールフィールド/ビジネスオブジェクトのプロパティにデータバインドするにはどうすればよいですか? SelectedItem を useFoo プロパティにバインドすると、Items コレクションには何が入るでしょうか? 「True」と「False」だけを追加する必要がありますか、それとも、表示されたアイテム (「Foo を使用」/「Foo を使用しない」) をその背後のブール値に結び付けるキー/値のペア オブジェクトを何らかの方法で追加できますか? これに関するドキュメントを見つけるのに苦労しています。
答えについて: 私が最終的に使用した解決策は、ビジネス オブジェクトを変更することでした。基本的な考え方は Gurge によって投稿されたものと非常に似ていますが、彼の回答を読む前に別の方法を思いつきました。つまり、単純に を返す別のプロパティを追加しました!useFoo
。1 つのラジオ ボタンは にバインドされsource.UseFoo
、もう 1 つのラジオ ボタンはsource.UseBar
(新しいプロパティの名前) にバインドされます。新しいプロパティにゲッターとセッターの両方があることを確認することが重要です。そうしないと、非常に奇妙な動作が発生します。