11
votes

Modèle personnalisé pour ComboBox ignore l'utilisation de displaymemberpath

Alors j'ai suivi plusieurs questions sur le site et je ne peux pas sembler trouver la réponse.

J'ai un Combobox . Cela fonctionnait bien. Je décide de rétablir l'apparence, donc je crée une copie du modèle ComboBox par défaut (ceci est une copie droite, aucune modification): xxx

maintenant, quand je sélectionne Un article de ma liste (qui est une collection de Pocos), il affiche l'espace de noms et le nom de la classe au lieu de la valeur qu'il est censé.

Mes recherches et mes expérimentations m'ont amené à croire que le problème est que le problème est que Mon nouveau modèle n'utilise pas la propriété displaymemberpath . J'ai essayé de définir un itemtemplate en remplaçant la méthode OndisplayMemberpathchanged , mais cela entraîne des erreurs lorsque je sélectionne un élément de la liste.

J'ai aussi On voit que les gens définissent le itemtemplate via xaml, mais j'ai des centaines de combogoxes, et je ne veux pas faire ça.

existe un moyen d'utiliser le displaymemberpath Propriété de My ControlTemplate ou du code que je pourrais exécuter dans un contrôle dérivé pour obtenir le résultat souhaité?


0 commentaires

5 Réponses :


1
votes

J'ai eu le même question , et il éteint le réglage du displaymemberpath est simplement un Raccourci pour régler le itemTemplate sur un textblock avec cette valeur dedans.

Pour cette raison, lorsque vous définissez le itemTemplate , alors displaymemberpath devient inutile car vous avez écrasé le texte texte par défaut avec une valeur ajoutée.


2 commentaires

Vérifiez la réponse ci-dessus. J'ai vu votre problème dans une question connexe, mais la solution ci-dessus fonctionne pour moi! Merci quand même si :)


J'ai utilisé la solution par h.B. Mais conséquence à cette réponse, essayant contenttemplate = "{templatebinding itemTemplate}" a également fonctionné - bien que je ne parvenais pas à laisser cela assez longtemps pour tester les effets secondaires.



22
votes

c'est pas une copie exacte, une chose cruciale est manquante dans cet élément: xxx

peut-être que vous l'avez accidentellement supprimé, à savoir: < Pré> xxx

Si vous ne disposez pas de cet ensemble, le displaymemberpath ne fonctionnera pas car le comboBox sélectionne entre les modèles à l'aide d'un sélecteur de modèle (comme vous le pouvez Utiliser itemTemplate ou displaymemberpath ).



0
votes

J'ai rencontré le même problème, cela devrait être un bug, je vais essayer de le signaler.

Lorsque vous "modifier une copie" du modèle de contrôle de Visual Studio, il manque la ligne:

ContentTemplateSelector = "{MODPLATELLOW ItemTemplateSelector}"

qui a provoqué "DisplayMemberPath" ne fonctionne pas correctement.


0 commentaires

0
votes

Je sais que c'est une ancienne question, mais j'ai fait face au même problème dans ces jours-ci et j'ai corrigé l'ajout de

ContentTemplateSelector = "{Templatedbinding ContentTemplateSelector}"

au lieu de

ContentTemplateSelector = "{TEMPLATEMINDING ItemTemplateSelector}"


0 commentaires

3
votes

Assurez-vous de ne pas manquer les éléments de ContentTemplateselector.

pour le modèle COMBox lui-même, il devrait être: P>

ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"        


0 commentaires