2010-12-03 17 views
0

Configuration:à deux voies de liaison et un sélecteur

  1. Il y a un ComboBox qui est lié à un ObservableCollection.
  2. Il existe un objet Car dans l'interface utilisateur. Sa propriété couleur est lié à la SelectedItem du ComboBox (la liaison. <ComboBox SelectedItem="{Binding Car.Color}".../>
  3. La liste des couleurs peut changer dans la base de données et doit être rafraîchi parfois

Le problème:

Lorsque le ObservableCollection<MyColor> est actualisé (== cela signifie qu'il envoie un Reset à l'intérieur de son événement CollectionChanged) la propriété Car's Color est définie sur le premier élément de la collection => la liste est actualisée => ComboBox recharge la collection et définit son élément sélectionné sur le premier dans le collection => La couleur de la voiture est changée en le même premier élément (à cause du bindi à deux ng) => problème

Donc, en bref - comment puis-je éviter cela? Comment puis-je dire sur recharger de prendre l'élément sélectionné tout de suite de la liaison?

+0

ObservableCollection - Quel est le code pour la classe MyColor –

+0

Il n'a pas vraiment d'importance. Imaginez un 'classe publique MyColor: INotifyPropertyChanged {/ * certains membres * /}'. Rien de spécial. – Jefim

Répondre

0

Vous pouvez supprimer la liaison tandis que les changements de collection:

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

ChangingData.Clear(); 
// <Rebuild> 

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

Personnellement, j'ai un cas différent ici, mais votre réponse est assez bonne et peut-être utile à certaines personnes. Dans mon code, j'ai eu un cas spécifique quand j'ai simplement rafraîchi les éléments de la collection eux-mêmes (au lieu de rafraichir la collection entière). Quoi qu'il en soit, merci pour la réponse. – Jefim