实现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
的人似乎做得相当糟糕。
更新:似乎将属性添加到ICollectionViewLiveShaping
的LiveFilteringProperties
集合的唯一方法是通过字符串。 鉴于这种限制,是否可以按另一个类中的属性进行过滤(在本例中为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。
- LINQ子查询“NOT IN”问题
- 在Z3中评估许多值的逻辑公式
- System.IO.FileNotFoundException:无法加载程序集…也许在Mono for Android Profile中不存在?
- asp.net mvc api return’此XML文件似乎没有与之关联的任何样式信息。 文档树如下所示。
- 析构函数 – 如果应用程序崩溃,它会被调用吗?
- 如何撤消未更改的文件的挂起更改?
- 与CancellationTokenSource的Task.Factory.FromAsync
- Fluentvalidation,Asp.NET Core列表中每个项目的不同validation
- .NET 4.5和.NET 4.5.1默认启用TLS 1.1和TLS 1.2