【问题标题】:Binding Visibility to Yes/No ComboBox with Converters使用转换器将可见性绑定到 Yes/No ComboBox
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 或者只是在代码后面做?似乎更容易。我正在寻找 XAML 解决方案。
  • 没有唯一的 XAML 解决方案,因为 XAML 属性仅在 NotifyPropertyChanged 事件触发时自动更新。这不会发生在 DataRow 上。您可以在代码隐藏中执行此操作,但数据绑定更简洁,建议用于 WPF/XAML 解决方案。
  • 好的,如果 XAML 无法实现,那么仅实现组合框的 OnSelectionChanged 并在那里设置可见性不是更容易吗?好像代码少了……
猜你喜欢
  • 2012-04-06
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2012-11-23
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多