我已经在谷歌搜索了一个简单的解决方案,但没有运气.我有一个标准的WPF组合框,我只希望能够根据用户在组合框具有焦点时键入的前2或3个字母来过滤显示的列表.我尝试了一些编码,包括一些lamba表达式,但错误"System.NotSupportedException"不断被抛出指定"combobox.Items.Filter"的行.我没有使用MVVM,只是希望这个简单的功能可供用户使用.请帮忙!PS IsEditable,IsTextSearchEnabled和StaysOpenOnEdit属性设置为true,但尚未实现所需的功能.
我开发了一个示例应用程序.我使用字符串作为记录项,您可以使用自己的实体来完成.Backspace也能正常工作.
public class FilterViewModel { public IEnumerableDataSource { get; set; } public FilterViewModel() { DataSource = new[] { "india", "usa", "uk", "indonesia" }; } } public partial class WinFilter : Window { public WinFilter() { InitializeComponent(); FilterViewModel vm = new FilterViewModel(); this.DataContext = vm; } private void Cmb_KeyUp(object sender, KeyEventArgs e) { CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(Cmb.ItemsSource); itemsViewOriginal.Filter = ((o) => { if (String.IsNullOrEmpty(Cmb.Text)) return true; else { if (((string)o).Contains(Cmb.Text)) return true; else return false; } }); itemsViewOriginal.Refresh(); // if datasource is a DataView, then apply RowFilter as below and replace above logic with below one /* DataView view = (DataView) Cmb.ItemsSource; view.RowFilter = ("Name like '*" + Cmb.Text + "*'"); */ } }
XAML