2013-03-27 13 views
5

Mam niestandardowy styl Combobox, który działa dobrze. Jest umieszczony wewnątrz kontrolki użytkownika i związany ze strukturą danych. Używam DisplayMemberPath do wyświetlania tylko jednego elementu w polu tekstowym Combobox. Styl ComboBox jest pobierany z MSDN i używany wielokrotnie. Więc nie jest tutaj wyświetlany.WPF debug output output System.WIndows.Data Error 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 

pojawia się następujący komunikat o błędzie podczas wypełniania irytujące okno wyjściowe:

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

jeśli pominąć

DisplayMemberPath="Name" 

... no debug o wyjście błędu 25 jest pokazane. Ale zdecydowanie potrzebuję DiplayMemberPath = "Name"! Czy masz pomysł, aby to naprawić?

+0

W twoim stylu 'ComboBoxStyle' możesz ustawić' ItemTemplate' dla ciebie combobox. Stąd ten błąd. –

Odpowiedz

7

rozwiązany: użyj właściwości TextSearch, niezależnie od tego, czy włączona jest funkcja TextSearch!

TextSearch.TextPath="Name" 
+0

Ładne obejście. Dobra robota tutaj :) –

11

Nie można jednocześnie ustawić wartości DisplayMemberPath i ItemTemplate.

DisplayMemberPath służy do informowania obiektu ItemsControl, która właściwość ma być wyświetlana podczas pokazywania obiektów. Od tego momentu nie trzeba ustawiać tego pola, jeśli już podajesz niestandardową wartość ItemTemplate, ponieważ możesz wybrać , aby wyświetlić obiekt w tej ItemTemplate.

Ponieważ domyślny styl Combobox z MSDN ustawia również ItemTemplate, jest to prawdopodobnie przyczyna błędu.

+0

Mam elementtemplate, który jest używany do wyświetlania elementów ComboboxItems. Powinien być również używany do wyświetlania zawartości pola edycji? – deafjeff

+0

Po ustawieniu DisplayMemebrPath, combobox działa tak, jak powinien. Kiedy go opuszczę, pole edycyjne wyświetla domyślny ciąg znaków (classname). Zrób ustawienie DisplaymemebrPath robi naprawdę coś użytecznego, jak ustawienie Itemtemplate dla ComboboxItems. Czy mógłbyś wyjaśnić, jak to połączyć, jak sugerujesz? – deafjeff

+0

Muszę dodać, że pole edycyjne NIE wyświetla elementu ComboboxItem, jak to jest zdefiniowane w Itemtemplate. Wyświetla człon "Nazwa". ItemTemplate pokazuje "Nazwa" "Wiek" "Adres" itp. Dla każdego przedmiotu. – deafjeff