将可见性绑定到是/否ComboBox与转换器

时间:2012-12-18 01:29:14

标签: wpf data-binding combobox visibility

我有一个表单,它从数据集中获取数据行以绑定其所有元素。其中一个是bool,但我希望bool由Yes / No组合框表示。所以我做了this并且效果很好。

我还想将几个元素的可见性绑定到此bool字段。加载表单时,可见性的初始设置有效。当我更改组合框选择时,ComboBox的ConvertBack()方法被调用(即它设置了绑定值)。但是,其可见性绑定到同一字段的其他元素不会更新。我在转换方法中设置了断点,它们永远不会像加载表单时那样被调用。

以下是相关的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;
}

1 个答案:

答案 0 :(得分:1)

如果您希望UI元素在数据属性更改时更改状态,则需要在数据类上实现INotifyPropertyChanged。

这意味着您不能将DataRow用于您的目的。您必须创建一个新类,然后在运行时使用DataRow中的值填充它,然后将该对象绑定到您的视图。

相关问题