2009-10-06 62 views
2

我有一個綁定到集合的樹形視圖,集合中的每個項目都綁定到另一個集合。 (使用hierachle數據模板)WPF - 在樹形視圖中篩選/搜索多個集合視圖

我想使用集合視圖.Filter事件處理程序來搜索樹。 問題是我需要多個收集視圖。

例如通過搜索詞過濾樹視圖項目的最佳方法是什麼?我可以用一個集合的單個綁定來做到這一點,但一旦集合中有集合,我就遇到了麻煩。

回答

3

我發現這樣做最簡單的方法是創建一個SearchFilter物業

 public string SearchFilter 
    { 
     get { return _searchFilter; } 
     set 
     { 
      _searchFilter = value; 
      OnPropertyChanged("MyTreeViewBoundCollection"); 
     } 
    } 

您的搜索過濾器綁定到一個文本框,每次搜索文本框中改變了你通知集已經改變

  <TextBox Text="{Binding Path=TemplateDataSchema.SearchFilter, UpdateSourceTrigger=PropertyChanged}"/> 

一旦變化已經在發生SearchFilter,WPF的綁定系統將重新查詢集合屬性,那麼它可以被過濾下來

public ObservableCollection<Category> MyTreeViewBoundCollection 
    { 
     get { 
      if (_searchFilter.Trim().Length < 1) 
       return myObject.Categories; 
      else 
      { 
       ObservableCollection<Category> cats = new ObservableCollection<Category>(); 
       string searchText = _searchFilter.ToLower().Trim(); 
       foreach (Category cat in myObject.Categories) 
       { 
        Category tmpCat = new Category(cat.CategoryName); 
        foreach (Field field in cat.Fields) 
        { 
         if (field.DataDisplayName.ToLower().Contains(searchText)) 
          tmpCat.Fields.Add(field); 
        } 
        if (tmpCat.Fields.Count > 0) 
         cats.Add(tmpCat); 
       } 

       return cats; 
      } 
     } 
    } 

這將只返回過濾器集合。