收藏ViewSource通过在文本框中输入来过滤列表框

问题描述:

我在WPF中列出了用户名和姓氏列表框。我有一个文本框,并且我正在尝试按名称进行过滤。下面是我想:(当我在文本框中我打字被过滤为Nothing)收藏ViewSource通过在文本框中输入来过滤列表框

这里是我的VM

 #region Members 

     private CollectionViewSource usercvs = new CollectionViewSource(); 
     private string searchString; 

     #endregion 

     #region Properties 

     public string SearchFilter 
     { 
      get 
      { 
       return this.searchString; 
      } 

      set 
      { 
       if (!string.IsNullOrEmpty(this.searchString)) 
        AddFilter(); 

       usercvs.View.Refresh();  
       this.searchString = value; 
      } 
     } 

     #endregion 

     #region Methods 

     private void AddFilter() 
     { 
      usercvs.Filter -= new FilterEventHandler(Filter); 
      usercvs.Filter += new FilterEventHandler(Filter); 

     } 

     private void Filter(object sender, FilterEventArgs e) 
     { 
      // see Notes on Filter Methods: 
      var src = e.Item as User; 
      if (src == null) 
       e.Accepted = false; 
      else if (src.LastName != null && !src.LastName.Contains(SearchFilter)) 
       e.Accepted = false; 
     } 

     #endregion 
    } 
} 
+1

得到它贵的ListBox绑定到该属性的用户(的ObservableCollection)? – Jehof 2013-04-09 11:31:57

+0

是的,对不起,我应该把代码中的列表框xaml。我会更新代码。 – KeyboardFriendly 2013-04-09 11:34:35

添加一个附加属性,以您的视图模型暴露出CollectionViewSource并绑定你的列表框该财产。

public CollectionViewSource FilteredUsers{ 
    get { 
    return usercvs.View; 
    } 
} 

ObservableCollection当你申请的任何过滤器的CollectionViewSource没有改变,那么你将永远看到的所有项目。 Filter将应用于CollectionViewSource,过滤的结果可以通过该类的属性View来访问。

+0

我做了财产,当我设置列表框绑定到属性没有被返回,但是当我在过滤器方法中设置断点数据显示。 – KeyboardFriendly 2013-04-09 13:36:56

与此

public ICollectionView FilteredUsers 
     { 
      get 
      { 
       return usercvs.View; 
      } 
     } 
+1

是的,这是正确的。我忘了返回CollectionViewSource的视图 – Jehof 2013-04-09 13:57:16

+0

再次感谢,我编辑了代码并缩短了它。 – KeyboardFriendly 2013-04-09 13:59:51