在自动完成组合框中绑定文本属性
有人可以帮助我解决组合框行为的问题。 这是我的组合框控件(WPF):
<ComboBox Grid.Row="1" Grid.Column="1" Margin="6,0,6,6" Name="comboBoxRegionTown" IsEditable="True" IsTextSearchEnabled="True" PreviewKeyUp="comboBoxRegionTown_PreviewKeyUp" IsTextSearchCaseSensitive="False" />
这个想法是让它自动完成(IsEditable =“True”IsTextSearchEnabled =“True”)。 所以然后我将任何文本输入到组合框中,它显示了数据库的一些结果。
这是comboBoxRegionTown_PreviewKeyUp事件(C#)的代码:
private void comboBoxRegionTown_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (!string.IsNullOrEmpty(comboBoxRegionTown.Text))
{
comboBoxRegionTown.ItemsSource = _br.GetQuery(x => x.Name.Contains(comboBoxRegionTown.Text) && x.RegionTypeId == (int)RegionType.Town).ToList();
comboBoxRegionTown.IsDropDownOpen = true;
}
else
{
comboBoxRegionTown.ItemsSource = null;
}
}
因此,对我来说工作正常,但是然后我单击它在ComboBox.Text属性中选择的组合框中找到的任何项目(在本例中为 - Region)。 当然,我可以为我的Region对象重写ToString()方法,并在其中设置其公共属性Name,并且此解决方案工作正常,但我认为最好的方法是找到如何将选定项绑定到我的组合框的Text属性。 有没有办法做到这一点?
我已经尝试过编辑Text =“{Binding Path = Name}”和/或SelectedItem =“{Binding Path = Name}”,但在这些情况下,总是得到空的Text。 请帮忙。
你需要做的是为你的ComboBox设置ItemTemplate
,但是如果你只想显示一个属性,有一个更简单的方法:在ComboBox中设置DisplayMemberPath="Name"
,它会为你生成正确的模板。