我正在尝试做什么
我正在尝试在AutoComplete
上实施ComboBox
功能而不使用WpfToolkit
。如果我没错,ComboBox
应该支持AutoComplete
一个简单的字符串项,例如:
<ComboBox IsEditable="True">
<ComboBoxItem>Apple</ComboBoxItem>
<ComboBoxItem>Banana</ComboBoxItem>
<ComboBoxItem>Pear</ComboBoxItem>
<ComboBoxItem>Orange</ComboBoxItem>
</ComboBox>
当前对象实现
实际上我的ComboBox
绑定了一个名为CheckedListItem
的自定义对象,该对象具有以下结构:
public class CheckedListItem<T> : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool isChecked;
private T item;
public CheckedListItem() { }
public CheckedListItem(T item, bool isChecked = false)
{
this.item = item;
this.isChecked = isChecked;
}
public T Item
{
get { return item; }
set
{
item = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item"));
}
}
public bool IsChecked
{
get { return isChecked; }
set
{
isChecked = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsChecked"));
}
}
}
此课程在ComboBoxItem
的{{1}}附近显示为CheckBox
Text
,类似于:
Item
其中[] Item1
[] Item2
...
是[]
。
ComboBox结构
Checkbox
看起来像这样:
ComboBox
其中<ComboBox IsEditable="True" ItemSource={Binding Countries}/>
是Countries
的{{1}},对象国家/地区是以这种方式实现的:
List
这段代码的问题是,当我在CheckedListItem<Country>
中输入一些文本时,这不会做任何事情,但应该显示包含键入字符串的项目。
到目前为止我尝试了什么
我尝试通过实施public class Country
{
public string Name { get; set; }
}
事件来解决此问题,实际上我是以这种方式管理的:
ComboBox
但这不能正常工作,因为如果我输入“England”,PreviewTextInput
就会显示所有MyComboBox.IsDropDownOpen = true;
CountryMenuComboBox.ItemsSource = Countries.Where(c => c.Item.Name.Contains(e.Text)).ToList();
。
有什么想法解决这个问题吗?
感谢。
答案 0 :(得分:2)
尝试将TextSearch.TextPath
属性设置为&#34; Item.Name&#34;:
<ComboBox IsEditable="True" ItemsSource="{Binding Countries}"
TextSearch.TextPath="Item.Name">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<CheckBox IsChecked="{Binding Item.IsChecked}" />
<TextBlock Text="{Binding Item.Name}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>