J'essaie d'implémenter ce qui suit: Deux listes déroulantes sur un formulaire Winforms, le premier a une liste de catégories parentes, le second est enfant du parent , la liste des enfants change de contenu en fonction de la sélection dans le parent.Événements SelectedItem/Index/ValueChanged non déclenchés lorsque DataSource est Databound sur ComboBox
Je suis en train de le faire en utilisant correctement mais je suis databinding trouver une bizarrerie avec le contrôle ComboBox.
I régler la source de données du parent manuellement:
cboParent.DataSource = ParentDataSource
où ParentDataSource est IList<ParentDTO>
. Je peux alors lier le seletedItem à la DTO ainsi:
cboParent.DataBindings.Add(new Binding("SelectedItem", bindingSource, "Parent", true, DataSourceUpdateMode.OnPropertyChanged));
se liant à Parent
un objet ParentDTO
sur mon DTO global.
Tous assez standard jusqu'à présent. Cela fonctionne et écrit le changement à mon objet DTO dès que je sélectionne quelque chose de nouveau dans la liste, génial!
Je lie alors la zone de liste déroulante de l'enfant à une source de données liste les objectifs primordiaux DTO: cboChild.DataBindings.Add(new Binding("DataSource", bindingSource, "Children", true, DataSourceUpdateMode.OnPropertyChanged));
où les enfants est un IList<ChildDTO>
sur le DTO global. Cela fonctionne également bien et dès que je change la sélection parent, le présentateur change la liste Children
sur le DTO et les valeurs affichées dans les changements cboChildren, fantastique, je vous entends pleurer (et je l'ai fait moi-même)! Il semble malheureusement que si vous utilisez la liaison de données pour définir la source de données sur un ComboBox, les événements SelectedItemChanged, SelectedIndexChanged et SelectedValueChanged ne se déclenchent pas du tout, jamais! Cela signifie que la liaison de données OnProperyChanged ne fonctionnera pas pour la deuxième liste déroulante. OnValidation fonctionne, mais il me semble un peu bizarre et je me demandais si quelqu'un avait rencontré auparavant et si elles avaient travaillé sur la façon de le faire fonctionner?
Merci à l'avance
Stu