2010-09-17 116 views
3

我是wpf的初学者。其实我正在设计一个从数据库接收数据的ComboBoxComboBox在没有风格的情况下可以正常工作。WPF中Combobox的绑定

我编辑了样式表中的ComboboxItem控件的ControlTemplate,就像资源字典一样。

如果Style适用于带有静态数据的ComboBox,则样式工作正常。但是,如果该样式适用于动态数据ComboBox(在本例中为从数据库绑定),则项目列表仅返回对象(显示的项目类似于“Class.Method.Property”),但不返回属性的内容我需要展示。

我一直在尝试所有,我已经阅读了互联网上关于xaml样式和ComboBox模板的所有内容,但我无法解决问题。

ContentPresenter看起来是这样的,它返回的数据绑定对象:

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

任何人可以帮助我吗?

回答

4

显示“Class.Method.Property”,因为WPF不知道如何显示您的类。你需要的是你的班级的DataTemplate。

除非你真的需要它,否则我不会深入到你的例子中。

如果你有对象数据绑定组合框,你只是想显示绑定的对象的属性,你可以这样做:

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

如果你想要一个更先进的显示,可以设置的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

我最近碰到了同样的问题,解决它我的内容展示器现在看起来是这样的:

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

我的问题,就像你的,是事实,我错过了ContentTemplateSelector。此外,如果您的下拉菜单显示不正确,我发现在ComboBoxItem样式中,您可以将内容演示者留空(<ContentPresenter />),并且它将正确显示。