实现ICollectionViewLiveShaping

任何人都可以帮我正确实现ICollectionViewLiveShaping以进行过滤吗? 关于这个问题,我没有在网上找到很多有用的文档。 这就是我所拥有的:

 public ICollectionView WorkersEmployed { get; set; } WorkersEmployed = new CollectionViewSource { Source = GameContainer.Game.Workers }.View; 

我没有使用GetDefaultView因为我需要在此集合上有多个filter实例。 如果重要, GameContainer.Game.Workers是一个ObservableCollection

 ApplyFilter(WorkersEmployed); private void ApplyFilter(ICollectionView collectionView) { collectionView.Filter = IsWorkerEmployed; } public bool IsWorkerEmployed(object item) { Worker w = item as Worker; return w.EmployerID == this.ID; } 

这一切都有效,但当然必须手动刷新,这就是我尝试使用ICollectionViewLiveShaping 。 我能找到的最好的例子就是这个 ,但不幸的是我仍然无法让它发挥作用。 鉴于我在这里有什么,任何人都可以给我一个正确的方向,让实时过滤工作?

任何帮助将不胜感激。

出于好奇,这真的是一项艰巨的任务吗? 如果是这样,那么设计ICollectionViewLiveShaping的人似乎做得相当糟糕。

更新:似乎将属性添加到ICollectionViewLiveShapingLiveFilteringProperties集合的唯一方法是通过字符串。 鉴于这种限制,是否可以按另一个类中的属性进行过滤(在本例中为Workers’EmployerID)?

任何对ICollectionViewLiveShaping有经验的人都可以告诉我,在这种情况下我想做什么甚至是一个可行的选择吗? 老实说,由于完全没有文档和可用的例子,我不知道它是否存在。 即使这是不可行的,也至少知道我是否在浪费时间。

您需要做的就是在LiveFilteringProperties add a property ,您希望filter在属性更改时调用该属性,并将集合的IsLiveFiltering设置为true to enable live filtering

每当EmployerID属性发生更改时,请确保引发PropertyChanged事件,即您的Worker类应实现INotifyPropertyChangedEvent

这将工作 –

 public ICollectionViewLiveShaping WorkersEmployed { get; set; } ICollectionView workersCV = new CollectionViewSource { Source = GameContainer.Game.Workers }.View; ApplyFilter(workersCV); WorkersEmployed = workersCV as ICollectionViewLiveShaping; if (WorkersEmployed.CanChangeLiveFiltering) { WorkersEmployed.LiveFilteringProperties.Add("EmployerID"); WorkersEmployed.IsLiveFiltering = true; } 

我对此进行了实验,看起来它不适合您(和我)想要的东西:更改过滤条件时自动过滤。 当DataGrid的项源的某些属性发生更改时,它会自动过滤,但过滤条件更改时则不会自动过滤 – 您必须手动调用ICollectionViewSource.Refresh。