WinForms中的CollectionViewSource(或替代)?

时间:2016-09-28 14:17:23

标签: c# winforms .net-3.5 collectionviewsource

我有一个网格,它有两种查看模式:所有项目,或只有PropertyX = A的项目。视图基于CheckBox切换开关。

我在对象模型层中有一个经常更新的集合副本,我想在数据层理想地将过滤器应用于它。有没有办法将过滤器应用于此集合以进行绑定,而无需创建集合的第二个副本或应用UI过滤器?

我认为我正在寻找的东西就像来自WPF的CollectionViewSource,但在WinForms中似乎没有。

据我所知,我的选择是:

  1. 某些数据层构造可以将过滤器应用于可以从数据层修改的绑定源,例如CollectionViewSource

  2. 创建我的集合的第二个副本,并在第一个集合更新时保持同步。由于添加,删除和修改项目的频率,这并不理想。

  3. 使用UI过滤器......并不理想,因为过滤器已经完成了很多特定于UI的事情,所以这个解决方案会混合控制UI和数据层之间的过滤器,并且会变得混乱。

  4. 还有别的吗?

  5. 在WinForms中是否存在类似于CollectionViewSource的内容,因此我可以使用选项#1?或者如果没有,在WinForms中处理这种场景的标准方法是什么?

    应该注意PropertyX永远不会改变它的价值。如果它是A,它总是A.所以这有帮助。

    这是我到目前为止所做的事情:

    public IEnumerable<MyClass> DisplayItems
    {
        get
        {
            if (SomeFlagIsChecked)
                return _allItems;
    
            return _allItems.Where(p => p.PropertyX == A);
        }
    }
    

    我的问题是将DataSource设置为IEnumerable似乎无法正常工作。我不确定这是Winforms的东西,.Net 3.5的东西,还是我正在使用的第三方控件的限制(DevExpress GridView)。

    我不想将其投放到.ToList(),因为这些集合可以在几百到几千条记录之间,并且每隔几分钟就会刷新一次。理想情况下,我希望每次需要刷新时都避免创建新对象。

0 个答案:

没有答案