ComboBox ne se met pas à jour automatiquement lorsque DataSource change?
Pour une raison que lors de l'ajout ou de suppression d'éléments de la source de données (un simple BindingList) la zone de liste déroulante des mises à jour en conséquence, mais si j'ai modifier un élément de ce genre, il ne met pas à jour automatiquement:
myBindingList[index].Name = "NewName";
myBindingList[index].Value = newValue;
pour pouvoir mettre à jour quand j'ai modifier un élément, par opposition à la création ou la suppression d'un objet que j'ai à faire après le changement:
myComboBox.DataSource = null;
myComboBox.DataSource = myBindingList;
Cela résout le problème, mais il semble plutôt compliqué solution. Aussi avec de grandes listes, il peut devenir lent (optimisation prématurée je sais) Mais y a-t-il encore un moyen de forcer le ComboBox à mettre à jour sans réattribuer complètement sa source de données?
Merci d'avoir lu.
2 réponses
c'est indiqué dans les forums MSDN:
L'interface IBindingList contient l'événement ListChanged où les contrôles comme le combobox se raccordent si la source de données sous-jacente affecté à elle met en œuvre ladite interface. votre source de données doit augmenter la liste correspondante modifiée avec les corrects ListChangeEventArgs si chaque fois que vous ajoutez, supprimez, changez, etc. votre exécuteur IBindingList. de cette façon, chaque fois que la source sous-jacente que vous aviez l'habitude de lier à votre zone de liste déroulante est modifié, le contrôle correspondant de L'UI (combobox) est rafraîchir.
vous dites que vous utilisez BindingList et en fait vous obtenez le combobox pour refléter ajouter ou supprimer des événements. Je pense que vous devriez faire la mise à jour des éléments déjà à l'intérieur de votre BindingList d'une autre manière parce qu'il semble que les événements BindingList appropriés ne se déclenchent pas.
vous pouvez soit enquêter sur cela ou simplement vivre avec reset et réassigner la source de données, Je ne pense pas est trop mauvais, vous êtes dans Statefull application Windows Forms pas dans SatetLess Webforms de sorte que vous ne avez vos objets tout le temps :)
Vous avez besoin d'observables collections et IPropertyChange mise en œuvre: