J'ai une question de liaison de données intéressante liée à la zone de liste déroulante. J'espère que quelqu'un a une bonne suggestion.Une question de liaison de données ComboBox
J'ai un formulaire simple, il contient un sélecteur de fichiers et une comboxbox. Chaque fois qu'un fichier est sélectionné, je lis une liste de chaînes du fichier vers un objet List et je règle comboBox.DataSource = listOfStrings.
Dans l'événement de chargement de formulaire, j'ai défini comboBox.DataBindings.Add ("SelectedItem", myObject, "PickedValue"); Le but est clair: chaque fois qu'une chaîne est sélectionnée dans la liste déroulante, je veux écrire la chaîne dans myObject.PickedValue.
Voilà toute l'histoire.
Maintenant, je lance le formulaire, plutôt que d'aller chercher un fichier, je vérifie d'abord la liste déroulante. Bien sûr, à ce stade, comboBox.DataSource est null, comboBox.SelectedItem est également null. Mais la liaison de données sur la comboBox est déjà configurée (puisque le paramètre est dans l'événement de chargement de formulaire). Maintenant, mon attention ne peut pas être déplacée de la combobox à nulle part ailleurs.
Je pense que la raison en est, lorsque j'essaie de vérifier la liste déroulante, elle a null comme SelectedItem. Lorsque j'essaie de déplacer le focus vers un autre emplacement, la liaison de données de la zone de liste déroulante est déclenchée. Sous-jacent, il tente de convertir l'élément sélectionné en chaîne et met à jour myObject.PickedValue avec cette chaîne convertie. Comme vous ne pouvez pas convertir une valeur nulle en une chaîne, la validation de la liaison de données échoue, et le mécanisme de validation ne permet pas de déplacer mon focus ailleurs et je suis aspiré à ce moment, je ne peux même pas déplacer un fichier.
Ma question est, quel est le workflow de configuration de liaison normale pour mon scénario d'application pour éviter ce piège? Quel est le bon ordre de mise en place d'une telle liaison de données afin que je puisse vérifier ma liste déroulante avant que sa source de données ne soit remplie par quelque chose? FYI, j'ai essayé de lier myObject.PickedValue à la propriété SelectedText de la liste déroulante (j'ai remarqué que SelectedText est une chaîne et ne sera jamais nulle, même si SelectedItem est null). Mais de façon intéressante, même si je sélectionne quelque chose dans la liste déroulante, SelectedText est toujours une chaîne vide lorsque la liaison de données est déclenchée. Quel est le problème ici?
Merci pour toute aide.
Merci de me donner une solution de contournement. Je pense que l'idée de désactiver la combobox jusqu'à ce qu'elle soit prête est une bonne idée. Et merci d'expliquer pourquoi la propriété SelectedText ne fonctionne pas pour moi. Je suppose que je vais le prendre comme réponse. – Steve