当前位置:  开发笔记 > 编程语言 > 正文

简单的WPF组合框过滤器

如何解决《简单的WPF组合框过滤器》经验,为你挑选了1个好方法。

我已经在谷歌搜索了一个简单的解决方案,但没有运气.我有一个标准的WPF组合框,我只希望能够根据用户在组合框具有焦点时键入的前2或3个字母来过滤显示的列表.我尝试了一些编码,包括一些lamba表达式,但错误"System.NotSupportedException"不断被抛出指定"combobox.Items.Filter"的行.我没有使用MVVM,只是希望这个简单的功能可供用户使用.请帮忙!PS IsEditable,IsTextSearchEnabled和StaysOpenOnEdit属性设置为true,但尚未实现所需的功能.



1> AnjumSKhan..:

我开发了一个示例应用程序.我使用字符串作为记录项,您可以使用自己的实体来完成.Backspace也能正常工作.

 public class FilterViewModel
    {
        public IEnumerable DataSource { 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


产量

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有