一种方法是使用事件(包括MVVM的绑定)
<ComboBox TextBoxBase.TextChanged="ComboBox_TextChanged" />
然而运行时就会发现,这个事件在疯狂的触发,很频繁
在实际应用中,如果关联查询数据库,网络吞吐什么的,就会卡顿
另一种方法是使用IsTextSearchEnabled属性,在文本框敲键盘会自动选择相关项
<ComboBox IsTextSearchEnabled="True" IsTextSearchCaseSensitive="False" TextSearch.TextPath="Name" />
然而又有新的问题,选择项不会显示到文本框(文本框仍然是键盘敲的内容,当然还可能跟Framework版本有关),于是我们需要更深入
试验数据含 3 个项
<ComboBox TextBoxBase.TextChanged="ComboBox_TextChanged">
<ComboBoxItem>啊啊啊</ComboBoxItem>
<ComboBoxItem>哦哦哦</ComboBoxItem>
<ComboBoxItem>呃呃呃</ComboBoxItem>
</ComboBox>
试验一:绑定 TextChanged 和 SelectionChanged 调试
private void Combobox_TextChanged(object sender, TextChangedEventArgs e)
{
// e.OriginalSource == TextBox, e.Source == sender == Combobox
var tb = e.OriginalSource as TextBox;
var cb = e.Source as ComboBox;
var cs = e.Changes.ToArray();
int alen = -1, offs = -1, rlen = -1;
if (cs.Length > 0) { alen = cs[0].AddedLength; offs = cs[0].Offset; rlen = cs[0].RemovedLength; }