我有一个表单,它从数据集中获取数据行以绑定其所有元素。其中一个是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}}"/>
感谢您的帮助。如果需要,我可以发布更多代码,我认为问题出在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;
}
答案 0 :(得分:1)
如果您希望UI元素在数据属性更改时更改状态,则需要在数据类上实现INotifyPropertyChanged。
这意味着您不能将DataRow用于您的目的。您必须创建一个新类,然后在运行时使用DataRow中的值填充它,然后将该对象绑定到您的视图。