Как сделать WPF ComboBox редактируемым с пользовательскими значениями - PullRequest
1 голос
/ 03 февраля 2010

Я хотел бы иметь комбинированный список, который позволяет выбирать из списка значений, а также позволяет настраивать значение из набранного текста. Для удобства отображения элементы являются сложным типом (скажем, шаблон элемента в выпадающем списке отображает цветовой патч и флаг, указывающий, является ли он пользовательским цветом).

public class ColorLevel
{
    public decimal Intensity { get; set; }
    public bool IsCustom { get; set; }
    public Color BaseColor { get; set; }
    public override ToString() { return string.Format("{0}", Intensity*100); }
}

Примеры элементов

var items = new [] { 
    new ColorLevel { Intensity = 0.9m, IsCustom = false, BaseColor = Color.Red },
    new ColorLevel { Intensity = 0.7m, IsCustom = false, BaseColor = Color.Red }
}

1007 * XAML *

<ComboBox SelectedItem="{Binding Path=SelectedColorLevel}"
          IsEditable="true" IsTextSearchEnabled="true">
</ComboBox>

Таким образом, приведенная выше разметка работает, когда элемент выбран из списка элементов. И когда вы набираете текстовым поиском, выбираются подходящие элементы. Если напечатанный текст не соответствует элементу, то для SelectedColorLevel устанавливается значение NULL.

Вопрос в том, в какой момент (и как) лучше всего создать новый пользовательский элемент, для которого можно установить значение SelectedColorLevel, если набранный текст не соответствует элементу.

Например, я бы хотел назначить новый элемент для выбранного значения, например

new ColorLevel { Intensity = decimal.Parse(textvalue), IsCustom = true }

или с помощью соответствующего конвертера и привязки данных к свойству Text.

1 Ответ

0 голосов
/ 03 февраля 2010

Не уверен, что я полностью понял .. Вы можете использовать событие KeyDown для добавления нового ColorLevel, например, когда нажата Return. Если items является ObservableCollection и вы устанавливаете его как ItemsSource ComboBox, новый ColorLevel, добавленный к элементам, должен быть доступен в списке и стать SelectedItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...