选中

时间:2015-06-10 05:10:59

标签: c# wpf

我在wpf控件中有可编辑的组合框。

<ComboBox Width="200"  Name="quickSearchText"
    TextBoxBase.TextChanged="searchTextChanged"
    IsTextSearchEnabled="False" 
    StaysOpenOnEdit="True" IsEditable="True">
</ComboBox>

文字输入后,我更改了Combobox项目(如自动填充文本框)。

private void searchTextChanged(object sender, TextChangedEventArgs e)
{
    string text = quickSearchText.Text; //Get typing text.
    List<string> autoList = new List<string>();

    autoList.AddRange(suggestions.Where(suggestion => !string.IsNullOrEmpty(text)&& suggestion.StartsWith(text))); //Get possible suggestions.

   // Show all, if text is empty.
   if (string.IsNullOrEmpty(text) && autoList.Count == 0)
   {
       autoList.AddRange(suggestions);
   }

   quickSearchText.ItemsSource = autoList;
   quickSearchText.IsDropDownOpen = autoList.Count != 0; //Open if any.
}

如果我从下拉菜单中选择一个项目或输入文字,然后按Enter,TextboxBase会冻结,我无法对其进行编辑。 (但可以突出显示文本并打开/关闭下拉列表)

如何解决?

3 个答案:

答案 0 :(得分:3)

由于此行,当前的解决方案无效:

quickSearchText.ItemsSource = autoList;

这将重置您的ComboBox数据,因此输入文本中的每个更改都将丢失。

要使您的解决方案正常工作,您应该使用数据绑定,如下所示:

代码背后:

public MainWindow()
{
    InitializeComponent();
    DataContext = this;
    autoList = new ObservableCollection<string>();
}

private List<string> suggestions;
public ObservableCollection<string> autoList { get; set; }
private void searchTextChanged(object sender, TextChangedEventArgs e)
{
    string text = quickSearchText.Text; //Get typing text.

    var suggestedList = suggestions.Where(suggestion => !string.IsNullOrEmpty(text) && suggestion.StartsWith(text)); //Get possible suggestions
    autoList.Clear();

    foreach (var item in suggestedList)
    {
        autoList.Add(item);
    }

    // Show all, if text is empty.
    if (string.IsNullOrEmpty(text) && autoList.Count == 0)
    {
        foreach (var item in suggestions)
        {
            autoList.Add(item);
        }
    }

    quickSearchText.IsDropDownOpen = autoList.Count != 0; //Open if any.
}

的Xaml:

<ComboBox Width="200"  Name="quickSearchText"
            ItemsSource="{Binding autoList}"
            TextBoxBase.TextChanged="searchTextChanged"
            IsTextSearchEnabled="False" 
            StaysOpenOnEdit="True" IsEditable="True">
</ComboBox>

答案 1 :(得分:1)

投入:

quickSearchText.ItemsSource = null;

作为searchTextChanged函数的第一行。似乎没有事先清除ItemsSource导致奇怪的行为并且首先放置这条线似乎解决了它。

答案 2 :(得分:0)

将其添加到searchTextChanged方法中以再次启用编辑。

require('dotenv').config()