【问题标题】:Control in an ItemTemplate of a ComboBox loses its bindingComboBox 的 ItemTemplate 中的控件失去其绑定
【发布时间】:2010-07-14 15:51:34
【问题描述】:

我有一个使用 ItemTemplate 的 ComboBox,如下所示。不知何故,项目模板中定义的文本框的 Text 属性与绑定断开连接,并在所选项目更改时停止更新。

ComboBox.ItemsSource 绑定到一个 DependencyProperty,它是 CatheterDefinition 对象的列表。 ComboBox.SelectedItem 绑定到作为单个 CatheterDefinition 对象的 DependencyProperty。

<ComboBox
  AutomationProperties.AutomationId="CatheterInfoModelFieldID"
  VerticalAlignment="Center" HorizontalAlignment="Stretch"
  ItemsSource="{x:Static PumpAndCatheter:CatheterInfoViewModel.CatheterModelDefinitions}"
  SelectedItem="{Binding ElementName=UserControl, Path=ViewModel.SelectedCatheterModel, Mode=TwoWay, NotifyOnSourceUpdated=True}"
  SourceUpdated="HandleModelSourceUpdated">
  <ComboBox.ItemContainerStyle>
    <!-- A style used to set the AutomationID based on the item goes here -->
  </ComboBox.ItemContainerStyle>
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <!-- This line below is the location of the problem -->
      <TextBlock Text="{Binding Converter={StaticResource CatheterModelDefinitionToStringConverter}}">
        <!-- A style used to set the AutomationID based on the item goes here -->
      </TextBlock>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

我有一个自动化测试,它产生了一个非常奇怪的行为(我在代码的初始开发过程中看到了几次相同的行为,但无法手动重现它) - 重现这个的测试从ComboBox,然后转到应用程序的另一部分并采取一些操作,最终将这个更改保存在数据模型中。当测试使用此 ComboBox 返回屏幕时,它会尝试从 ComboBox 中选择另一个项目。 SelectedItem 发生了变化,并且它必然会更改的值,但是 ComboBox 中的文本没有改变 - 以某种方式与文本框的 Text 属性的绑定被破坏(或某些东西)......绑定仍然执行(转换器仍然在选择更改时运行,而它转换为正确的值),但文本属性永远不会更新。

想法? (我无法提供这方面的示例,因为它是一个巨大的应用程序,并且只能在我知道的一个测试下重现)

【问题讨论】:

  • 不确定,也许您应该绑定到 SelectedValue,而不是 SelectedItem。

标签: wpf binding combobox itemtemplate


【解决方案1】:

绑定损坏大多是由于未调用(或未正确调用)OnPropertyChanged("PropName") 方法造成的。

如果没有看到您的底层实现,我会说这很可能是问题的根源。

【讨论】:

  • 组合框绑定的属性是依赖属性。无需调用 OnPropertyChanged。此外,我将项目模板更改为使用标签而不是文本框。由于转换的结果是一个字符串,所以使用了字符串类型的默认数据模板,导致如下可视化树显示值: 有趣的是,Label.Content 属性设置正确,但 Textbox.Text 属性仍然损坏。
  • 另外,我相信当我离开屏幕时可能会发生断开连接......我没有确认这一点,但它可能比我最初想象的更早发生。
  • 您的嵌套视图模型是 DependencyProperty 吗?
  • SelectedItem 绑定中引用的 ViewModel 既是依赖属性又是常规属性(在 UserControl 的构造函数中设置),而我一直在调试它。这两种情况都会出现问题。
  • "Label.Content 属性设置正确,但 Textbox.Text 属性仍然损坏" 您是否在标签上使用相同的转换器?另外,您是否使用过任何工具来查看正在触发哪些 WPF 事件以及它们在何处被处理?您更改的财产可能会丢失在某个地方。这些都是在黑暗中拍摄的,因为损坏的绑定是特定于源的,并且可能是许多事情的结果。
猜你喜欢
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2014-11-26
相关资源
最近更新 更多