代码之家  ›  专栏  ›  技术社区  ›  bohdan_trotsenko

基于lambda的可观测采集切片

  •  2
  • bohdan_trotsenko  · 技术社区  · 15 年前

    ObservableCollection<ViewUnit> _myItems 菲尔德,哪里 ViewUnit 工具 INotifyPropertyChanged .

    视图单元 Handled : bool 财产。

    WPF应用程序的主视图具有 ListBox _myItems .

    IObservableCollection<> 依赖于现有的 _我的项目

    IObservableCollection<ViewUnit> _myFilteredCollection = HelperClass<ViewUnit>.FromExisting(_myItems, (e) => !e.Handled);
    

    我可以自己实现。我只是觉得有人通过这个问题,并有一个很好的解决方案(我只是不知道它的名字)。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Quartermeister    15 年前

    看一看 CollectionView . 这是一个围绕处理筛选、分组和排序的集合的视图。当您要求WPF绑定到一个集合时,它实际上绑定到了它的默认视图,因此您可以像这样过滤默认集合视图:

    var collectionView = CollectionViewSource.GetDefaultView(_myItems);
    collectionView.Filter = e => !((ViewUnit)e).Handled;
    

    object ,因此必须将参数强制转换为 ViewUnit . 如果属性发生变化,它也不会得到通知,因此您需要致电 collectionView.Refresh Handled 属性更改。如果从中添加或删除,它将被更新 _myItems 不过。

    也可以查看Bea Stollnitz的博客 How do I filter items from a collection