【问题标题】:Binding Text Property in Autocomplete Combobox在自动完成组合框中绑定文本属性
【发布时间】:2011-07-25 21:30:57
【问题描述】:

有人可以帮我解决组合框行为的问题吗?这是我的组合框控件 (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 对象的 ToString() 方法并在那里设置它的公共属性 Name,这个解决方案工作正常,但我认为最好的方法是找到如何将所选项目绑定到我的组合框的 Text 属性中。有没有办法做到这一点?

我已经尝试过 ind Text="{Binding Path=Name}" 和/或 SelectedItem="{Binding Path=Name}" 但在这些情况下总是得到空文本。请帮忙。

【问题讨论】:

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


    【解决方案1】:

    您需要为您的 ComboBox 设置 ItemTemplate,但如果您只想显示单个属性,还有更简单的方法:在 ComboBox 中设置 DisplayMemberPath="Name",它会为您生成正确的模板.

    【讨论】:

    • 太棒了! DisplayMemberPath="Name" 就像一个魅力。但是我不能同时使用 DisplayMemberPath 和 ItemTemplate?
    • 否 - ItemTemplate 将覆盖 DisplayMemberPath。基本上使用 DisplayMemberPath 将创建一个模板帽子是绑定到您选择的属性的 TextBlock。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多