I have editable combobox where not always the preferred item is in the drop-down list.
I would like to 开发者_运维问答have the possibility of manually entering text in the textbox which is propagated to the string bound to SelectedValue.
Right now the string bound to SelectedValue is only updated if the entered value is on of the ones in the ComboBox items.
How do I allow custom values not available in the ComboBox list to be manually entered and properly propagated to bound value?
I was just doing this yesterday and today and it looks like the following:
set the combobox
IsEditable="true"
instead of binding to
SelectedItem
, bind to theText
property of the comboboxif you're binding to a custom object instead of just strings, you need to also set
TextSearch.TextPath="NameOfField"
. This lets the text search behavior work, and also shows this property in the textbox as well.
All in all, I ended up with something like:
<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}" />
Setting the binding to Text property of Combo will suffice as well.
<ComboBox
IsTextSearchEnabled="True"
IsEditable="True"
ItemsSource="{Binding Items}"
Text="{Binding SelectedItemText, Mode=TwoWay}" />
精彩评论