当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

如何允许组合框具有不在itemssource中的选定值?

admin 96℃
我有一个这样的组合框:

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

SelectableValues 是一个列表 doubleSelectedValue 是一个 double 是的。如果用户从列表中选择一个值或手动输入其中一个值,则 SelectedValue 属性已更新。但如果用户手动输入另一个值,则不是。如何允许 SelectedValue 接受其他价值观 ItemsSource 是吗?

编辑:把它想象成MS Word中的字体大小框。我可以从列表中选择一个值,也可以提供自己的值。

创建继承组合框的用户控件。将依赖项属性添加为'SelectedText'。为组合框上的LostFocus创建事件处理程序,在事件处理程序中分配输入的值依赖项属性'SelectedText'。 在'selectedText'的setter中进行绑定,如果值为new,则将ad设置为collection,并将selectedValue设置为new。

间接地,您必须通过在组合框中添加新属性来更新源。


  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>


转载请注明:我的代码 » 如何允许组合框具有不在itemssource中的选定值?