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?

Ronag
quelle

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}" />
John Gardner
quelle
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}" />
Rauld
quelle
1
Funktioniert perfekt zum Binden an eine Liste von Strings.
Herman Cordes