2013-04-09 87 views
2

我在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

回答

3

添加一個附加屬性,以您的視圖模型暴露出CollectionViewSource並綁定你的列表框該財產。

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

ObservableCollection當你申請的任何過濾器的CollectionViewSource沒有改變,那麼你將永遠看到的所有項目。 Filter將應用於CollectionViewSource,過濾的結果可以通過該類的屬性View來訪問。

+0

我做了財產,當我設置列表框綁定到屬性沒有被返回,但是當我在過濾器方法中設置斷點數據顯示。 – KeyboardFriendly 2013-04-09 13:36:56

2

與此

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

是的,這是正確的。我忘了返回CollectionViewSource的視圖 – Jehof 2013-04-09 13:57:16

+0

再次感謝,我編輯了代碼並縮短了它。 – KeyboardFriendly 2013-04-09 13:59:51