AutoCompleteBox не получает правильное значение в С# wpf

В настоящее время я работаю над проектом WPF С#. Я использую элемент управления AutoCompleteBox WPF, но у меня возникла проблема с получением значения из коробки.

Предполагая, что поле автозаполнения предназначено для имени сервера, когда я набираю «loc», во всплывающем окне отображается «localhost», и я выбираю значение из раскрывающегося списка.

Когда я затем попытаюсь отправить форму и попытаться получить значение поля, оно получит значение того, что я печатаю, а не то, что я выбрал, то есть значение будет «loc».

Ниже приведен код, который я использую для заполнения элементов автозаполнения для элемента управления.

using (SQLiteDataReader reader = cmd.ExecuteReader())
{
    List<string> serverArr = new List<string>();
    while (reader.Read())
    {
        serverArr.Add(reader["his_server"].ToString());
    }
    txtServer.ItemsSource = serverArr;
}

Я получаю значение из поля автозаполнения, говоря txtServer.Text;

Обновлять

Как предложил @Tom Studee, я попытался использовать txtServer.selectedItem, который отлично работает, когда выбран элемент из автозаполнения. Однако, если введено значение, которое не находится в раскрывающемся списке автозаполнения, оно завершается с ошибкой Null Pointer Exception.


person Boardy    schedule 31.07.2011    source источник
comment
Я не могу воспроизвести это, когда я выбираю предлагаемый элемент из списка, он также обновляет свойство Text. Как определяется ваш AutoCompleteBox?   -  person Fredrik Hedblad    schedule 01.08.2011
comment
@Meleak SelectedItem отлично работает, если щелкнуть предлагаемый элемент. Теперь проблема заключается в том, что если пользователь вводит значение, которого нет в предложении автозаполнения, это вызывает исключение нулевого указателя.   -  person Boardy    schedule 01.08.2011
comment
Итак, вы ищете выделенный элемент или текст? Если пользователь выбирает элемент, которого нет в списке, ожидаемым результатом будет null. Если вы ищете текстовое значение, используйте свойство Text, или я что-то упустил?   -  person Fredrik Hedblad    schedule 01.08.2011
comment
@Meleak, мне нужно иметь возможность получить любой из них. Мне нужно получить текст, если это новая запись, и мне нужно получить выбранный элемент, если пользователь выбирает одно из предложений. Спасибо   -  person Boardy    schedule 02.08.2011


Ответы (2)


Вместо .Text используйте свойство .SelectedItem.

person Tom Studee    schedule 31.07.2011
comment
Спасибо, это сработало, чтобы остановить получение исключения нулевого указателя, я создал оператор if, чтобы проверить, что .text не был нулевым. Спасибо за помощь - person Boardy; 02.08.2011

Вы могли бы быть в состоянии

   string cbValue;
   if (SelectedIndex == -1) cbValue = .Text; else cbValue = .SelectedItem;
person paparazzo    schedule 01.08.2011
comment
для поля автозаполнения нет параметра selectedindex. - person Boardy; 02.08.2011
comment
У меня была правильная часть .SelectedItem. Я буду помнить, чтобы не пытаться ответить ни на один из ваших вопросов в будущем. - person paparazzo; 31.01.2012
comment
Я не говорил о .SelectedItem, я говорил о selectedIndex. Как вы можете видеть из моего принятого ответа, .SelectedItem у меня работает нормально, но то, что было у вас, не сработало. Не могу вспомнить, почему это было слишком давно. - person Boardy; 01.02.2012