2009-11-09 5 views
3

Nous utilisons WPF ComboBox pour permettre à l'utilisateur de faire les choses suivantes: 1) sélectionner des éléments en tapant les premiers caractères 2) autocomplétion l'entrée en filtrant la liste 3) suggérant le premier élément à correspondre aux lettres tapées comme l'élément sélectionnéWPF ComboBox limite à la liste

Le défi est de gérer le scénario lorsque l'utilisateur entre des caractères qui ne sont pas dans la liste. Cela devrait indiquer que l'utilisateur a fait une erreur OU souhaite entrer un nouvel élément.
La zone de liste déroulante est liée à des types personnalisés et possède des règles de validation associées à la propriété qui est remplie avec la sélection. Nous ne pouvons pas comprendre comment identifier lorsque l'utilisateur a tapé une entrée NOT IN THE LIST et définir la propriété liée à une valeur non valide qui déclenchera la validation.

Lorsqu'un utilisateur entre une chaîne de caractères qui ne représente pas un élément de la liste, l'élément sélectionné devient nul. Puisque l'élément selecteditem est null, le chemin de propriété lié à l'objet datacontext de formulaires ne peut pas être identifié par WPF et la liaison échoue donc. L'objet métier conserve ensuite la valeur précédente définie et n'obtient pas de nouvelle valeur.

Répondre

4

Maintenant que j'ai passé une bonne demi-heure à étudier un problème similaire, la réponse est assez simple: évaluez à la fois le SelectedItem et la propriété Text du ComboBox. L'élément sélectionné sera null si l'utilisateur n'a pas sélectionné une valeur dans la liste; dans ce cas, le texte contiendra l'entrée de l'utilisateur. En fonction de vos besoins, vous pouvez utiliser la liaison à l'une ou aux deux propriétés ou les évaluer dans le code qui les accompagne.