データセットからデータ行を取得してすべての要素をバインドするフォームがあります。そのうちの 1 つは bool ですが、その bool を Yes/No コンボ ボックスで表現したいと考えています。だから私はこれをしました、そしてそれはうまくいきます。
また、いくつかの要素の可視性をこの bool フィールドにバインドしたいと考えています。フォームが読み込まれると、可視性の初期設定が機能します。コンボボックスの選択を変更すると、ComboBox の ConvertBack() メソッドが呼び出されます (つまり、バインドされた値が設定されます)。しかし、可視性が同じフィールドにバインドされている他の要素は更新されません。Conversion メソッドにブレークポイントを設定しましたが、フォームがロードされたときのように呼び出されることはありません。
関連する XAML は次のとおりです。
<ComboBox SelectedIndex="{Binding Path=[Adequate], Converter={StaticResource b2iConverter}}" Name="cb_Adequate" >
<ComboBoxItem>Yes</ComboBoxItem>
<ComboBoxItem>No</ComboBoxItem>
</ComboBox>
<Label Content="Reason:"
VerticalAlignment="Center"
Visibility="{Binding Path=[Adequate],
Converter={StaticResource b2vConverterInverse}}"/>
<TextBox Text="{Binding Path=[NotAdequateReason]}"
Visibility="{Binding Path=[Adequate],
Converter={StaticResource b2vConverterInverse}}"/>
- 「十分」はブールフィールドです
- b2iConverter は単に booleanToIndexConverter です (上記のリンクから)
- b2vConverterInverse は単なる反転ブール値から可視性へのコンバーターです (Adequate が FALSE または 0 の場合に表示されるラベルとテキスト ボックスが必要です)。
助けてくれてありがとう。必要に応じてさらにコードを投稿できます。問題は XAML にあると思います...
編集:どうやら XAML では不可能なようです (以下の Greg の投稿を参照)。
private void cb_Adequate_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Visibility vis = (cb_Adequate.SelectedItem as ComboBoxItem).Content.ToString() == "Yes" ? Visibility.Collapsed : Visibility.Visible;
label_Reason.Visibility = tb_AdequateDesc.Visibility = vis;
}