3 votes

Comment faire en sorte que la boîte combo de wpf tire une propriété spéciale ?

Je veux utiliser une boîte combo pour saisir une valeur entière simple.

Dans mon application, certaines valeurs numériques ont des significations particulières, mais toute valeur numérique doit pouvoir être saisie (tapée).

La boîte combo doit donc présenter un champ d'édition avec une flèche déroulante vers la droite.

Si l'on clique sur la flèche de la liste déroulante, celle-ci doit présenter une liste de explications (chaînes de caractères) pour les valeurs numériques spéciales qui ont une signification particulière (par exemple "103 - Wait for next turn" ).

Si l'utilisateur clique sur une entrée de la liste déroulante (au lieu de saisir directement la valeur correspondante), la valeur numérique correspondante doit être transférée dans le champ d'édition.

J'ai essayé ce qui suit :

  • J'ai défini les paramètres de la ComboBox IsEditable à true
  • Je lie le ItemsSource à une collection d'objets qui ont à la fois une propriété numérique (nommée "Value" ) et une propriété de type chaîne de caractères (nommée "Explanation" ).
  • J'ai mis le DisplayMemberPath à la propriété "Explanation" (le nom de la propriété string ci-dessus)

Avec cela en place, je peux taper librement n'importe quel numéro que je veux, et l'explication de la chaîne de caractères de chaque numéro spécial est correctement affichée dans la liste déroulante. C'est exactement ce que je veux.

Cependant, lorsque je sélectionne l'une des explications dans la liste déroulante, c'est la chaîne explicative qui est transféré dans le champ d'édition, pas la valeur numérique correspondante.

Question : Comment puis-je faire en sorte que la boîte combo transfère la propriété numérique ( "Value" ) au lieu du texte d'explication lorsque je clique sur un élément de la liste déroulante ?

0voto

Utilisez un modèle de données pour afficher le texte d'explication dans le drowp-down.

Pour afficher la valeur dans le champ d'édition de texte, définissez la propriété attachée TextSearch.TextPath pour la ComboBox au nom de la propriété value dans votre type "special values".

Si la ComboBox ne doit pas compléter automatiquement les éventuelles valeurs spéciales lors de la saisie d'un nombre, définissez son paramètre IsTextSearchEnabled à la propriété faux . (Notez que cela désactiverait également la sélection automatique d'une valeur spéciale dans la liste déroulante si vous en saisissez une dans le champ d'édition).

La définition de la ComboBox devrait donc ressembler à ceci :

<ComboBox ItemsSource="{Binding ...}"
          IsEditable="True"
          TextSearch.TextPath="Value"
          IsTextSearchEnabled="False">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Explanation}" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X