1

我有一个表单,它从数据集中获得一个数据行来绑定它的所有元素。其中一个是布尔值,但我希望该布尔值由是/否组合框表示。所以我这样做,效果很好。

我还想将几个元素的可见性绑定到这个 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 只是一个反转布尔到可见性转换器(我希望在足够为 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 回答