2013-06-22 33 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(); 

启用过滤收集索引。该列表将随集合视图而改变。因此在某些方面它不是确定性的。我不确定但很想知道你的用例是什么,强迫你在收集视图上使用索引器。