2013-03-27 14 views
5

Ho un Combobox in stile personalizzato che funziona perfettamente. È collocato all'interno di un controllo utente e associato a una struttura dati. Uso DisplayMemberPath per mostrare solo un elemento nel CasBox di Combobox. Lo stile ComboBox è preso da MSDN e utilizzato molte volte. Quindi non è visualizzato qui.output errore debug wpf Errore System.WIndows.Data 25

<UserControl x:Class="wpf.projext1.MyComboBox" 
     x:Name="MyControl" 
     ... 
    <ComboBox Style="{StaticResource ComboBoxStyle}" 
        Text="{Binding ElementName=MyControl, Path=Text}" 
        IsEditable="True" 
        IsTextSearchEnabled="False" 
        StaysOpenOnEdit="True" 
        ItemsSource="{Binding ElementName=MyControl, Path=MyItemsSource}" 
        DisplayMemberPath="Name" 
    </ComboBox 

ottengo il seguente messaggio di errore fastidioso popolare la finestra di output:

System.Windows.Data Error: 25 : Both 'ContentTemplate' and 'ContentTemplateSelector' are set; 'ContentTemplateSelector' will be ignored. ComboBoxItem:'ComboBoxItem' (Name='') 

se lascio il

DisplayMemberPath="Name" 

... viene mostrato alcun output di debug su errori 25. Ma ho sicuramente bisogno di DiplayMemberPath = "Nome"! Hai un'idea per risolvere il problema?

+0

Nel tuo Style 'ComboBoxStyle' potresti impostare il' ItemTemplate' per la tua combobox. Quindi, questo errore. –

risposta

7

risolto: utilizzare la proprietà TextSearch associata, non importa se TextSearch è abilitato!

TextSearch.TextPath="Name" 
+0

Soluzione piacevole. Funzionando bene qui :) –

11

Non è possibile impostare sia DisplayMemberPath e ItemTemplate allo stesso tempo.

DisplayMemberPath viene utilizzato per comunicare a ItemsControl quale proprietà visualizzare quando vengono visualizzati gli oggetti. Non rende quindi possibile impostare questo campo se stai già passando una personalizzata ItemTemplate, dal momento che puoi scegliere come per mostrare l'oggetto all'interno di tale ItemTemplate.

Poiché lo stile Combobox predefinito da MSDN imposta anche un ItemTemplate, è probabile che sia la causa dell'errore.

+0

Ho un oggetto che viene usato per mostrare ComboboxItems. Dovrebbe essere usato anche per visualizzare il contenuto della editbox? – deafjeff

+0

Quando imposto DisplayMemebrPath, la casella combinata funziona come dovrebbe. Quando lo lascio fuori, la editbox mostra la stringa predefinita (nome della classe). L'impostazione di DisplaymemebrPath è davvero utile, come l'impostazione di un Itemtemplate per ComboboxItems. Quindi potresti spiegare come metterlo insieme, come hai suggerito? – deafjeff

+0

Devo aggiungere che la editbox NON visualizza un oggetto Combobox come è definito nel Itemtemplate. Mostra onle il membro "Nome". Il ItemTemplate mostra "Nome" "Età" "Indirizzo" ecc. Per ogni articolo. – deafjeff