我在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会冻结,我无法对其进行编辑。 (但可以突出显示文本并打开/关闭下拉列表)
如何解决?
答案 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()