自动完成组合框中的绑定文本属性

时间:2011-03-30 07:40:22

标签: c# wpf c#-4.0 wpf-controls binding

有人可以帮我解决组合框行为的问题。这是我的组合框控件(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}”,但在这些情况下,总是会得到空文本。请帮忙。

1 个答案:

答案 0 :(得分:1)

您需要做的是为您的ComboBox设置ItemTemplate,但是如果您只想显示单个属性,则可以更简单的方法:在ComboBox中设置DisplayMemberPath="Name",它将生成正确的模板。