有人可以帮我解决组合框行为的问题。这是我的组合框控件(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属性。有没有办法做到这一点?
我已经尝试过ind Text =“{Binding Path = Name}”和/或SelectedItem =“{Binding Path = Name}”,但在这些情况下,总是会得到空文本。请帮忙。
答案 0 :(得分:1)
您需要做的是为您的ComboBox设置ItemTemplate
,但是如果您只想显示单个属性,则可以更简单的方法:在ComboBox中设置DisplayMemberPath="Name"
,它将生成正确的模板。