任何人都可以帮我正确实施 ICollectionViewLiveShaping
为了过滤?关于这个问题,我没有在网上找到很多有用的文档。这就是我所拥有的:
public ICollectionView WorkersEmployed { get; set; }
WorkersEmployed = new CollectionViewSource { Source = GameContainer.Game.Workers }.View;
我没用 GetDefaultView
因为我需要在这个集合上有多个过滤器实例。如果重要, 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
告诉我,如果我在这种情况下尝试做什么甚至是一个可行的选择?老实说,由于完全没有文档和可用的例子,我不知道它是否存在。即使这是不可行的,也至少知道我是否在浪费时间。
你需要做的就是 add a property
在 LiveFilteringProperties
您希望过滤器在属性更改和设置时调用 IsLiveFiltering
至 true
为您的收藏 to enable live filtering
。
确保 PropertyChanged
每当有事件被提出 EmployerID
财产变化即你的 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;
}
你需要做的就是 add a property
在 LiveFilteringProperties
您希望过滤器在属性更改和设置时调用 IsLiveFiltering
至 true
为您的收藏 to enable live filtering
。
确保 PropertyChanged
每当有事件被提出 EmployerID
财产变化即你的 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。