2010-12-03 2 views
0

설정 :는 양방향 바인딩과 선택기

  1. 는 ObservableCollection에 바인딩 된 콤보가있다.
  2. UI에 Car 개체가 있습니다. 색 속성은 (콤보 상자의 selectedItem가 바인딩 된 바인딩 :. <ComboBox SelectedItem="{Binding Car.Color}".../>
  3. 컬러리스트는 데이터베이스에 변경하고 때로는 갱신해야

문제 다음 ObservableCollection<MyColor>가 새로 고쳐집니다

(== 이것은 CollectionChanged 이벤트 안에 Reset을 보내는 것을 의미합니다. Car의 Color 속성이 컬렉션의 첫 번째 항목으로 설정 됨 => 목록이 새로 고침 => ComboBox는 컬렉션을 다시로드하고 선택한 항목을 첫 번째 항목으로 설정합니다. collection => 자동차의 색상이 동일한 첫 번째 항목으로 변경되었습니다 (양방향 바인드 때문에 ng) => 문제

간단히 말해서이 문제를 어떻게 피할 수 있습니까? 바인딩에서 선택된 항목을 바로 가져 오도록 재로드를 어떻게 알 수 있습니까?

+0

ObservableCollection에 는 - 그것은 정말 중요하지 않습니다 MyColor 클래스 –

+0

의 코드 것입니다. 일반적인 '공용 클래스 MyColor : INotifyPropertyChanged {/ * some members * /}'를 상상해보십시오. 특별한 것은 없습니다. – Jefim

답변

0

당신은 컬렉션 변경하면서 바인딩을 제거 할 수 있습니다

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

ChangingData.Clear(); 
// <Rebuild> 

comboBox.SetBinding(ComboBox.SelectedItemProperty, binding); 
+0

나는 개인적으로 여기에 다른 경우가 있지만, 당신의 대답은 꽤 좋고 어떤 사람들에게는 유용 할 수 있습니다. 내 코드에서는 (컬렉션 전체를 새로 고치는 대신) 컬렉션 항목 자체를 새로 고쳤던 특별한 경우가있었습니다. 어쨌든, 답변 주셔서 감사합니다. – Jefim