【发布时间】:2012-12-05 04:31:48
【问题描述】:
我有一个表单,它从数据集中获得一个数据行来绑定它的所有元素。其中一个是布尔值,但我希望该布尔值由是/否组合框表示。所以我做了this,效果很好。
我还想将几个元素的可见性绑定到这个 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;
}
【问题讨论】:
-
您是否尝试过显式设置绑定模式?您也可以尝试删除
Path周围的方括号[],我认为这里不需要。
标签: wpf data-binding combobox visibility