Как сделать WPF ComboBox редактируемым с пользовательскими значениями

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

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 }
}

XAML

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

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

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

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

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

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


person Liam    schedule 03.02.2010    source источник


Ответы (1)


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

person Natxo    schedule 03.02.2010