2010-09-17 12 views
3

Je suis un débutant en wpf. En fait, je suis un ComboBox qui reçoit des données d'une base de données. Le ComboBox fonctionne très bien à ce stade sans style.Liaison dans Combobox dans WPF

J'ai modifié le ControlTemplate du contrôle ComboboxItem dans une feuille de style, comme un dictionnaire de ressources.

Si le Style s'applique à ComboBox avec des données statiques, le style fonctionne correctement. Mais si le style s'applique à ComboBox avec des données dynamiques (liaison d'une base de données dans ce cas), la liste des éléments renvoie uniquement l'objet (les éléments affichés sont similaires à "Class.Method.Property") mais pas le contenu de la propriété J'ai besoin de montrer.

J'ai essayé tous, et j'ai tout lu sur Internet sur les styles xaml et les modèles ComboBox mais je n'ai pas pu résoudre le problème.

Mon ContentPresenter ressemble à ce qui retourne l'objet de la liaison de données:

<ContentPresenter 
     ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" 
     Content="{TemplateBinding ContentControl.Content}"/> 

Quelqu'un peut-il me aider s'il vous plaît?

Répondre

4

"Class.Method.Property" est affiché car WPF ne sait pas comment afficher votre classe. Ce dont vous avez besoin est un DataTemplate pour votre classe.

À moins que vous en ayez vraiment besoin, je n'insisterais pas si profondément dans les modèles que vous avez dans vos exemples.

Si vous avez un ComboBox databound avec des objets et que vous voulez juste afficher une propriété de l'objet lié que vous pouvez faire:

<ComboBox ItemsSource="{Binding PersonList}" 
        DisplayMemberPath="FullName" /> 

Si vous voulez un affichage plus avancé, vous pouvez définir le ItemTemplate.

<ComboBox ItemsSource="{Binding PersonList}"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate DataType="{x:Type local:Person}"> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding FullName}" /> 
         <TextBlock Text="{Binding Age}" /> 
        </StackPanel> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
4

J'ai récemment rencontré le même problème et de le réparer mon présentateur de contenu ressemble maintenant à ceci:

<ContentPresenter        
    Content="{TemplateBinding ComboBox.SelectionBoxItem}" 
    ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}" 
    ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" /> 

Mon problème, tout comme le vôtre, était le fait que je manque le ContentTemplateSelector. Aussi, si vous rencontrez un problème avec le menu déroulant montrant incorrectement, j'ai trouvé que dans le style ComboBoxItem vous pouvez laisser le présentateur de contenu vide (<ContentPresenter />) et il s'affichera correctement.