2013-06-22 74 views
0

工作爲了過濾對象的名單,我定義這個屬性:無法與我的過濾項

private ICollectionView _view; 
    public ICollectionView View 
    { 
     get 
     { 
      return _view; 
     } 
     set 
     { 
      _view = value; 
      OnPropertyChanged("View"); 
     } 
    } 

然後我的過濾器:

item.View = CollectionViewSource.GetDefaultView(item.myList); 

item.View.Filter = delegate(object o) 
{ 

      if (myCondition) 
     { 
     return true; 
     } 

} 

過濾器工作正常,但作爲ICollectionView是一個接口,我不能用我的項目工作:如果我打電話給他們這樣說:

element1 = item.View[0].SomeProperty; 

我收到

Cannot apply indexing with [] to an expression of type 'System.ComponentModel.ICollectionView' 

我試着在一開始View沒有界面來設置,但後來我不能讓過濾器的工作。 這樣做,並試圖投:

item.View = (ICollectionView)CollectionViewSource.GetDefaultView(item.myList); 

有沒有給我帶來了很好的效果無論是。

我可以做些什麼,以便不僅過濾(在我的情況下,我顯示在一個組合框中的項目),但也與他們一起工作...我的目標是能夠爲剩下的所有元素做一個foreach循環組合框。這可能嗎?

回答

1

將視圖與列表分開存儲。下面簡寫,填寫適當的INotifyPropertyChanged等。

List<SomeType> list; 
ICollectionView view; 

view = list as ICollectionView; 
view.Filter = obj => obj.someprop == somevalue; 

list[ 10 ].someprop = somevalue 
+0

謝謝,我正試圖執行它,但是,我有一個問題:列表是否更改或它保持不變?如果它發生變化,我可以將列表直接綁定到我的ComboBox,這是正確的嗎? – Sturm

+0

如果我綁定了視圖,那麼在我的ComboBox中沒有項目,並且如果我綁定列表,則會收到一個異常,我無法將List 轉換爲ICollectionView。你知道這裏發生了什麼嗎? – Sturm

0

定列表和ICollectionView:

List<SomeType> list; 
ICollectionView view=CollectionViewSourse.GetDefaultView(list); 
view.Filter=filter; 

您可以使用

var filteredList=view.Cast<SomeType>().ToList(); 

啓用過濾收集索引。該列表將隨集合視圖而改變。因此在某些方面它不是確定性的。我不確定但很想知道你的用例是什麼,強迫你在收集視圖上使用索引器。