1

データセットからデータ行を取得してすべての要素をバインドするフォームがあります。そのうちの 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;
}
4

1 に答える 1

1

データプロパティが変更されたときにUI要素の状態を変更する場合は、データクラスにINotifyPropertyChangedを実装する必要があります。

これは、DataRowを目的に使用できないことを意味します。新しいクラスを作成し、実行時にDataRowからの値をそのクラスに入力してから、そのオブジェクトをビューにバインドする必要があります。

于 2012-12-18T04:07:10.433 に答える