可编辑的ComboBox选择第一个输入的字符

时间:2017-05-01 14:30:06

标签: c# wpf mvvm combobox

我遇到问题ComboBox选择第一个输入的字符,然后导致第二个输入的字符覆盖第一个字符的问题。

编辑:我试图做的一个小解释。 我已将ComboBox设置为自动完成控件。当我输入一个字符时,我使用CollectionView类来过滤与每个输入字符匹配的任何名称。在输入文本后,ComboBox下拉菜单需要打开,这就是我绑定到IsDropDownOpen的原因。 This is how it is supposed to look here.

这超出了我的范围,我无法研究如何阻止这种行为。

以下是我的意思的截屏。

enter image description here

这是ComboBox XAML:

<ComboBox Style="{StaticResource ComboBoxToggleHidden}" 
      DisplayMemberPath="FullName" SelectedValuePath="Key"
      IsTextSearchEnabled="False" 
      IsEditable="True" 
      StaysOpenOnEdit="True" 
      Text="{Binding Path=EnteredText, UpdateSourceTrigger=PropertyChanged}" 
      ItemsSource="{Binding Path=Employees}" 
      SelectedItem="{Binding UpdateSourceTrigger=PropertyChanged, Path=SelectedEmployee}" 
      IsDropDownOpen="{Binding IsDropDown}">
</ComboBox>

编辑:我已将其缩小到这个,IsDropDown = true;,评论此问题解决了这个问题。但是在编辑ComboBox

时我需要下拉菜单

EnteredText属性

private string _enteredText;

public string EnteredText
{
    get { return _enteredText; }
    set
    {
        _enteredText = value;
        Filter(value);
        IsDropDown = true;
        OnPropertyChanged();
    }
}


public bool IsDropDown { get; set; }  

1 个答案:

答案 0 :(得分:1)

好的,我解决了这个问题,但是我必须要做,直到我弄清楚为什么会发生这种行为。

我在构造函数中创建了一个KeyUpEvent事件,

EventManager.RegisterClassHandler(typeof(TextBox), TextBox.KeyUpEvent,
            new RoutedEventHandler(DeselectText));

然后在Handler我刚取消选择了文字。

private void DeselectText(object sender, RoutedEventArgs e)
{
   var textBox = e.OriginalSource as TextBox;
   if (textBox == null) return;
   if (textBox.Text.Length >= 2) return;
   textBox.SelectionLength = 0;
   textBox.SelectionStart = 1;
}

我知道这是一个黑客,但在找到正确的解决方案之前别无选择。

这就是黑客的看法。 enter image description here