【问题标题】:Two-way binding and a Selector双向绑定和选择器
【发布时间】:2010-12-03 09:35:24
【问题描述】:

设置:

  1. 有一个绑定到 ObservableCollection 的 ComboBox。
  2. UI 中有一个 Car 对象。它的 Color 属性绑定到 ComboBox 的 SelectedItem(绑定:<ComboBox SelectedItem="{Binding Car.Color}".../>
  3. 数据库中的颜色列表可能会发生变化,应不时刷新。

问题:

ObservableCollection<MyColor> 被刷新(== 这意味着它在其CollectionChanged 事件中发送Reset)时,Car 的 Color 属性设置为集合中的第一项 => 列表被刷新 => ComboBox 重新加载集合并将其选定项设置为集合中的第一项 => 汽车的颜色更改为相同的第一项(因为双向绑定)=> 问题

简而言之 - 我该如何避免这种情况?如何在重新加载时告知将所选项目立即从绑定中取出?

【问题讨论】:

  • ObservableCollection - MyColor 类的代码是什么
  • 这并不重要。想象一下通常的“公共类 MyColor : INotifyPropertyChanged { /* some members */ }”。没什么特别的。

标签: wpf data-binding two-way


【解决方案1】:

您可以在集合更改时移除绑定:

var binding = comboBox.GetBindingExpression(ComboBox.SelectedItemProperty).ParentBinding;
comboBox.ClearValue(ComboBox.SelectedItemProperty);

ChangingData.Clear();
// <Rebuild>

comboBox.SetBinding(ComboBox.SelectedItemProperty, binding);

【讨论】:

  • 我个人在这里有不同的情况,但您的回答非常好,可能对某些人有用。在我的代码中,虽然我有一个特定的情况,当我自己刷新集合项目时(而不是刷新整个集合)。无论如何,谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2021-11-04
  • 2019-02-16
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多