Bearbeitbare ComboBox mit Bindung an Wert nicht in Liste


81

Ich habe eine bearbeitbare Combobox, in der nicht immer das bevorzugte Element in der Dropdown-Liste enthalten ist.

Ich möchte die Möglichkeit haben, manuell Text in das Textfeld einzugeben, der an die an SelectedValue gebundene Zeichenfolge weitergegeben wird.

Derzeit wird die an SelectedValue gebundene Zeichenfolge nur aktualisiert, wenn der eingegebene Wert einer der in den ComboBox-Elementen angegebenen Werte ist.

Wie kann ich zulassen, dass benutzerdefinierte Werte, die nicht in der ComboBox-Liste verfügbar sind, manuell eingegeben und ordnungsgemäß an gebundene Werte weitergegeben werden?

Antworten:


133

Ich habe das gestern und heute gemacht und es sieht folgendermaßen aus:

  1. Stellen Sie die Combobox ein IsEditable="true"

  2. Anstatt an zu SelectedItembinden, binden Sie an die TextEigenschaft der Combobox

  3. Wenn Sie an ein benutzerdefiniertes Objekt anstatt nur an Zeichenfolgen binden, müssen Sie auch festlegen TextSearch.TextPath="NameOfField". Dadurch funktioniert das Textsuchverhalten und diese Eigenschaft wird auch im Textfeld angezeigt.

Alles in allem hatte ich so etwas wie:

<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}" />

4
Oh, und wenn Sie ItemTemplate nicht verwenden, können Sie DisplayMemberPath = "Name" anstelle eines DataTemplate verwenden.
John Gardner

28

Das Festlegen der Bindung an die Text-Eigenschaft von Combo reicht ebenfalls aus.

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

1
Funktioniert perfekt zum Binden an eine Liste von Strings.
Herman Cordes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.