Как мне разрешить ComboBox иметь выбранное значение, которого нет в ItemsSource? - PullRequest
2 голосов
/ 25 августа 2010

У меня есть ComboBox, как это:

<ComboBox IsEditable="True" 
          ItemsSource="{Binding SelectableValues}"
          SelectedValue="{Binding SelectedValue}" />

SelectableValues - это список double, а SelectedValue - это double. Если пользователь выбирает значение из списка или вручную вводит одно из этих значений, мое свойство SelectedValue обновляется. Но если пользователь вручную вводит другое значение, это не так. Как мне разрешить SelectedValue принимать значения, отличные от ItemsSource?

Редактировать : Думайте об этом как о поле размера шрифта в MS Word. Я могу выбрать значение из списка или указать собственное значение.

1 Ответ

1 голос
/ 25 августа 2010

Создание пользовательского элемента управления, наследующего comboBox.Добавьте свойство зависимости как «SelectedText».создать обработчик событий для LostFocus в поле со списком, в обработчике событий назначить введенное значение зависимости свойство SelectedText.сделайте привязку к 'SelectedText', в его установщике, если значение является новым, тогда объявление в коллекцию и установите SelectedValue на новое.

Косвенным образом вы должны обновить источник, добавив новое свойство в ComboBox.


  public class ExtendedComboBox : ComboBox
    {
        public ExtendedComboBox()
        {
            this.IsEditable = true;
            this.LostFocus += ComboBox_LostFocus;
        }
        public string SelectedText
        {
            get
            {
                return (string)GetValue(SelectedTextProperty);
            }
            set
            {
                SetValue(SelectedTextProperty, value);
            }
        }

        public static readonly DependencyProperty SelectedTextProperty = DependencyProperty.Register("SelectedText", typeof(string), typeof(ExtendedComboBox), new FrameworkPropertyMetadata(string.Empty, new PropertyChangedCallback(OnSelectedTextPropertyChanged)));


        private static void OnSelectedTextPropertyChanged(object sender, DependencyPropertyChangedEventArgs e)
        {

        }

        private void ComboBox_LostFocus(object sender, RoutedEventArgs e)
        {
            SelectedText = (e.Source as ComboBox).Text??string.Empty;
        }

    }

   // Binding Example

 %gt%local:ExtendedComboBox Margin="3" x:Name="ecb" SelectedText="{Binding SelectedText,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding SelectedTextList}">%gt/local:ExtendedComboBox>


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