Текст по умолчанию в раскрывающемся списке

Я работаю над приложением wpf, при использовании элемента управления Combo Box я назначаю ему ItemsSource. Таким образом, он отображает список элементов без выбранного элемента, теперь пользователь может выбрать элемент по своему выбору. Когда пользователь сделал выбор, он не имеет возможности отменить это. Я хочу, чтобы он смог получить исходное состояние, когда ни один элемент не выбран. Как я могу это сделать?

3 ответа

Решение

Есть несколько способов, которые также были бы похожи в программировании форм Windows. Вы можете сделать одно из следующего:

1) Добавьте пустую или --None-- запись в ваш источник данных combobox, который является записью по умолчанию. 2) Вы можете отслеживать событие нажатия клавиши и, скажем, использовать клавишу ESC, чтобы сбросить выбранный индекс обратно до -1.
3) Если ваш выпадающий список позволяет вводить текст, вы также можете разрешить им очистить текст и перезапустить, если текстовое поле пустое, установите выбранный индекс обратно на -1, чтобы он не сбрасывался до выбранного значения.

Часто мои пользователи предпочитают вариант 1, но это мои пользователи.

Это должно дать вам несколько вариантов.

Вообще говоря, я считаю, что если мне нужно добавить сложность в приложение WPF, добавление его в источник данных более надежно, чем добавление его в XAML.

В вашем примере я бы исправил это в своем источнике данных. Если у меня есть:

public IEnumerable<Person> People { get {...} }

в моем источнике данных я бы добавил это:

public IEnumerable<Person> PeopleWithNull
{
   get
   {
      return (new List<Person> { null }).Concat(People);
   }
}

Я бы пошел на сброс обратно к записи --None-- поверх пустой записи по умолчанию (с индексом -1) каждый раз. Если вы обрабатываете события для "выбора изменено" или чего-то еще в ComboBox, то вы рискуете получить ошибки с нулевой ссылкой, если вы укажете поле на -1, и это так же просто, так как установлено единственное изменение, которое вам нужно сделать. выбранный индекс (скажем) 0, а не -1.

myComboBox.SelectedIndex = 0; //where 0 is a given default content entry.
Другие вопросы по тегам