我有可编辑的组合框,但并非总是首选项位于下拉列表中。
我想在传播到绑定到SelectedValue的字符串的文本框中手动输入文本的可能性。
现在,仅当输入的值位于ComboBox项中的值上时,才会更新绑定到SelectedValue的字符串。
如何允许手动输入ComboBox列表中不可用的自定义值并将其正确传播为绑定值?
Answers:
我昨天和今天只是这样做,它看起来像下面这样:
设置组合框 IsEditable="true"
而不是绑定到SelectedItem
,而是绑定到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}" />
设置对Combo的Text属性的绑定也将足够。
<ComboBox IsTextSearchEnabled="True" IsEditable="True"
ItemsSource="{Binding Items}" Text="{Binding SelectedItemText, Mode=TwoWay}" />