1.ComboBox绑定打开下拉列表事件DropDownOpened,把ComboBox设置为可编辑IsEditable="True"
<ComboBox x:Name="cmbxPortList" Margin="5" Width="200" ItemsSource="{Binding PortList}" DisplayMemberPath="PortName" SelectedValuePath="PortCd" IsEditable="True" Background="White">
<i:Interaction.Triggers>
<i:EventTrigger EventName="DropDownOpened">
<i:InvokeCommandAction Command="{Binding ComboBoxPortDropDownOpened}" CommandParameter="{Binding ElementName=cmbxPortList}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
2.代码获取输入值,根据输入值过滤查询下拉列表值
/// <summary>
/// 点击港口控件,动态加载港口下拉列表数据
/// </summary>
private void ComboBoxPortDropDownOpenedExecute(object obj)
{
if(portAllList==null)
{
portAllList = portDao.getBasePortList(null);
}
ComboBox cmbxPortList = obj as ComboBox;
string key = (string)cmbxPortList.Text;
if(!String.IsNullOrEmpty(key))
{
List<BasePortModel> tempList = new List<BasePortModel>();
foreach (BasePortModel value in portAllList)
{
if(!String.IsNullOrEmpty(value.PortCd) && value.PortCd.Contains(key))
{
tempList.Add(value);
continue;
}
if (!String.IsNullOrEmpty(value.PortEName) && value.PortEName.Contains(key))
{
tempList.Add(value);
continue;
}
if (!String.IsNullOrEmpty(value.PortName) && value.PortName.Contains(key))
{
tempList.Add(value);
continue;
}
}
this.PortList = tempList;
}
else
{
this.PortList = portAllList;
}
}