2010-09-17 120 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 />),並且它將正確顯示。