Двусторонняя привязка и селектор
Настроить:
- Существует ComboBox, который связан с ObservableCollection.
- В интерфейсе есть объект Car. Его свойство Color привязано к SelectedItem ComboBox (привязка:
<ComboBox SelectedItem="{Binding Car.Color}".../>
- Список цветов может изменяться в базе данных и иногда должен обновляться.
Эта проблема:
Когда ObservableCollection<MyColor>
обновляется (== это означает, что он отправляет Reset
внутри его CollectionChanged
событие) для свойства "Цвет автомобиля" задается первый элемент в коллекции => список обновляется => ComboBox перезагружает коллекцию и устанавливает выбранный элемент в первый элемент коллекции => цвет автомобиля изменяется на тот же первый элемент (из-за двусторонней привязки) => проблема
Итак, вкратце - как я могу избежать этого? Как я могу при перезагрузке сказать, чтобы взять выбранный элемент сразу же из привязки?
1 ответ
Решение
Вы можете удалить привязку при изменении коллекции:
var binding = comboBox.GetBindingExpression(ComboBox.SelectedItemProperty).ParentBinding;
comboBox.ClearValue(ComboBox.SelectedItemProperty);
ChangingData.Clear();
// <Rebuild>
comboBox.SetBinding(ComboBox.SelectedItemProperty, binding);