Текст по умолчанию в раскрывающемся списке
Я работаю над приложением 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.