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);

也没有给我带来好的结果。

为了过滤(在我的情况下,我在 ComboBox 中显示项目)而且还与它们一起工作,我该怎么做......我的目标是能够为 ComboBox 中剩余的所有元素创建一个 foreach 循环。这可能吗?

4

2 回答 2

1

将视图与列表分开存储。下面的简写,填写适当的 INotifyPropertyChanged 等。

List<SomeType> list;
ICollectionView view;

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

list[ 10 ].someprop = somevalue
于 2013-06-22T21:27:24.327 回答
0

给定列表和 ICollectionView:

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

您可以使用

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

为过滤集合启用索引器。该列表将随集合视图而变化。因此在某种程度上它不是确定性的。我不确定但很想知道您的用例是什么,以迫使您在集合视图上使用索引器。

于 2013-06-24T02:32:07.443 回答