Свойство Binding Text в Автозаполнении Combobox - PullRequest
1 голос
/ 30 марта 2011

Может кто-нибудь помочь мне решить проблему с комбобоксом. Вот мой элемент управления списком (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 тип моего выбранного объекта (в данном случае - Регион). Конечно, я могу переопределить метод ToString () для моего объекта Region и установить там его открытое свойство Name, и это решение отлично работает, но я думаю, что лучший способ - это найти способ связать выбранный элемент со свойством Text в поле со списком. Есть ли способ сделать это?

Я уже пытался индировать Text = "{Binding Path = Name}" и / или SelectedItem = "{Binding Path = Name}", но в этих случаях просто всегда получается пустой текст. Пожалуйста, помогите.

1 Ответ

1 голос
/ 30 марта 2011

Что вам нужно сделать, это установить ItemTemplate для вашего ComboBox, но если вы просто хотите отобразить одно свойство, есть более простой способ: установите DisplayMemberPath="Name" в ComboBox, и он сгенерирует правильный шаблон для вас.

...