Comment afficher une valeur différente pour les valeurs de liste déroulante / élément sélectionné dans un ComboBox WPF?
J'ai un WPF zone de liste déroulante liée à une liste d'éléments avec de longues descriptions.
Le type lié à la zone de liste déroulante a la fois à court et à long description en tant que propriétés. Actuellement, je suis à la liaison de la description complète.
comboBox.DisplayMemberPath = "FullDescription";
Comment faire en sorte que lorsque l'élément est sélectionné et affiché comme un seul élément dans la zone de liste déroulante, il sera affiché comme valeur de l' ShortDescription
propriété, tandis que la liste déroulante affiche FullDescription
?
source d'informationauteur Marek
Vous devez vous connecter pour publier un commentaire.
Mise à jour 2011-11-14
Je suis récemment tombé sur la même obligation de nouveau et je n'étais pas très heureux avec la solution que j'ai posté ci-dessous. Voici une jolie manière à obtenir le même comportement sans re-création de modèles de la
ComboBoxItem
. Il utilise unDataTemplateSelector
D'abord, de préciser l'ordinaire
DataTemplate
la liste déroulanteDataTemplate
et laComboBoxItemTemplateSelector
dans les ressources pour leComboBox
. Alors référence à laComboBoxItemTemplateSelector
comme unDynamicResource
pourItemTemplateSelector
ComboBoxItemTemplateSelector
vérifie si le conteneur est l'enfant d'unComboBoxItem
si c'est le cas, nous avons affaire à une liste déroulante point, sinon c'est l'élément dans leComboBox
.GetVisualParent
Vieille solution, qui demande une ré-création de modèles de
ComboBoxItem
Cela se traduit dans le comportement suivant
Il ne semble pas fonctionner pour moi maintenant, mais celui-ci n':
Une autre option que j'ai trouvé est de placer une zone de texte sur la zone de liste déroulante de la zone de texte. La taille et l'aligner de sorte qu'il fixe parfaitement sur elle, puis utiliser une sous-similaire à ceci:
(remplacez * par les chiffres)
le résultat est que lorsque sélectionné, la liste déroulante affiche la liste comme d'habitude, mais la zone de texte se trouvant au-dessus, il ne montre son premier caractère.
Espère que cette aide.