2010-09-18 28 views
64

Mam edytowalny combobox, w którym nie zawsze preferowany element znajduje się na liście rozwijanej.Edytowalny element ComboBox z powiązaniem z wartością niewymienioną na liście

Chciałbym mieć możliwość ręcznego wprowadzania tekstu w polu tekstowym, który jest propagowany do łańcucha powiązanego z wartością SelectedValue.

Obecnie łańcuch związany z wartością SelectedValue jest aktualizowany tylko wtedy, gdy wprowadzona wartość dotyczy tylko tych elementów ComboBox.

Jak zezwolić na ręczne wprowadzanie i propagowanie wartości niestandardowych niedostępnych na liście ComboBox do wartości związanych?

Odpowiedz

106

właśnie robi to wczoraj i dziś, i to wygląda następująco:

  1. ustawić combobox IsEditable="true"

  2. zamiast wiązania się SelectedItem, wiążą się majątku combobox

    Text
  3. Jeśli wiążisz obiekt niestandardowy zamiast tylko ciągi, musisz także ustawić TextSearch.TextPath="NameOfField". Pozwala to na zachowanie wyszukiwania tekstu, a także pokazuje tę właściwość również w polu tekstowym.

W sumie skończyło się coś takiego:

<ComboBox x:Name="c" 
      IsEditable="True" 
      IsTextSearchEnabled="True" 
      IsTextSearchCaseSensitive="False" 
      StaysOpenOnEdit="True" 
      Text="{Binding NameOnViewModel}" 
      TextSearch.TextPath="NameOnChildItems" 
      ItemsSource="{Binding Items}" 
      ItemTemplate="{StaticResource DataTemplate}" /> 

<TextBlock Text="{Binding ElementName=c,Path=Text}" /> 
+2

oh, a jeśli nie korzystasz z ItemTemplate, możesz użyć DisplayMemberPath = "Name" zamiast używać DataTemplate. –

+1

świetnie! Działa również dla numerów – Roberto

24

Ustawienie wiązania na tekst własność Combo wystarczą również.

<ComboBox IsTextSearchEnabled="True" IsEditable="True" 
ItemsSource="{Binding Items}" Text="{Binding SelectedItemText, Mode=TwoWay}" /> 
+0

Działa doskonale znaleźć do wiązania do listy ciągów. –

Powiązane problemy