为了过滤我已定义此属性的对象列表:
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);
Haven也给我带来了不错的结果。
我不仅可以进行过滤(在我的情况下,我在ComboBox中显示项目),还可以使用它们...我的目标是能够为剩余的所有元素创建一个foreach循环。组合框。这可能吗?
答案 0 :(得分:1)
将视图与列表分开存储。下面的简写,填写适当的INotifyPropertyChanged等。
List<SomeType> list;
ICollectionView view;
view = list as ICollectionView;
view.Filter = obj => obj.someprop == somevalue;
list[ 10 ].someprop = somevalue
答案 1 :(得分:0)
给定List和ICollectionView:
List<SomeType> list;
ICollectionView view=CollectionViewSourse.GetDefaultView(list);
view.Filter=filter;
您可以使用
var filteredList=view.Cast<SomeType>().ToList();
为过滤集合启用索引器。该列表将随集合视图而变化。因此,在某种程度上,它不是确定性的。我不确定但很有兴趣知道你的用例是什么迫使你在集合视图上使用索引器。