我有一个可编辑的组合框,其中并不总是在下拉列表中找到首选项。
我希望能够手动输入文本到文本框中,并将其传播到与SelectedValue绑定的字符串。
现在,只有当输入的值是ComboBox项之一时,与SelectedValue绑定的字符串才会被更新。
如何允许输入ComboBox列表中没有的自定义值,并正确地传播到绑定值?
我昨天和今天刚做过这个,看起来像下面这样:
将ComboBox的属性IsEditable="true"
不要绑定到SelectedItem
,而是绑定到ComboBox的Text
属性
如果你绑定到的是自定义对象而不仅仅是字符串,则还需要设置TextSearch.TextPath="NameOfField"
。这让文本搜索行为起作用,并且在文本框中也显示了该属性。
总体而言,我最终得到了如下所示的内容:
<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}" />
将组合框的绑定设置为Text属性也足以满足要求。
<ComboBox
IsTextSearchEnabled="True"
IsEditable="True"
ItemsSource="{Binding Items}"
Text="{Binding SelectedItemText, Mode=TwoWay}" />