查看过滤器不适用于只读的ObservableCollection

时间:2014-03-04 17:02:31

标签: c# .net wpf .net-4.0 inotifypropertychanged

我有一个属性:

public ObservableCollection<Mapping> Mapping
{
  get { return new ObservableCollection<Mapping>(_standardMappings
                                             .Union(_userDefinedMappings)); }
}

在向基础集合添加/删除新项目时触发(OnPropertyChanged)。

我绑定到ListView,一切都有效,除了过滤。我正在按如下方式进行过滤:

  var view = CollectionViewSource.GetDefaultView(Mapping);
  view.Filter = filteringPredicate;

过滤代码被点击,但ListView从不更改其视图。我可以通过做这样的事情来实现这个目标

private ObservableCollection<Mapping> _mappings;
public ObservableCollection<Mapping> Mappings { get{ return _mappings; } }

并且,在基础集合的OnCollectionChanged上:

private void OnMappingCollectionChanged()
{
  _standardMappings.CollectionChanged -= OnMappingCollectionChanged;
  _userDefinedMappings.CollectionChanged -= OnMappingCollectionChanged;
  _buttonMappings.Clear();
  _standardMappings.ToList().ForEach(mapping=>_mappings.Add(mapping));
  _userDefinedMappings.ToList().ForEach(mapping=>_mappings.Add(mapping));
  _standardmMappings.CollectionChanged += OnMappingCollectionChanged;
  _userDefinedMappings.CollectionChanged += OnMappingCollectionChanged;
}

然而,这是一个非常糟糕的解决方案IMO

而且,我确实关注CompositeCollection,但you cannot filter on them

1 个答案:

答案 0 :(得分:0)

您必须刷新视图才能重新评估过滤条件。

view.Refresh();