我正在尝试将 ObservableCollection
的 LINQ 查询结果绑定(bind)到我的 UI,我似乎已经完成了一半。如果我将新项目添加到 ObservableCollection
,我可以引发 CollectionChanged 并对该属性调用 PropertyChanged,它将更新。不幸的是,修改项目的属性不会导致 CollectionChanged 触发,我不知道如何让它触发。我尝试过其他人发布的方法,例如 TrulyObservableColection没有运气。有没有办法强制 CollectionChanged 触发?或者在这种情况下我可以采取另一条路线。我宁愿不必放弃 LINQ。任何建议将不胜感激。
private ObservableCollection<Worker> _workers = new ObservableCollection<Worker>();
public ObservableCollection<Worker> Workers
{
get { return _workers; }
}
public IEnumerable<Worker> WorkersEmployed
{
get { return GameContainer.Game.Workers.Where(w => w.EmployerID == this.ID); }
}
GameContainer.Game.Workers.CollectionChanged += Workers_CollectionChanged;
private void Workers_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
RaisePropertyChanged(() => WorkersEmployed);
}
这在假设一个新条目被添加到集合中的情况下有效。如何在简单修改项目(例如本例中的 Workers 的 EmployerID)时获得相同的结果?
最佳答案
How can I achieve the same result when an item is simply modified (such as Workers' EmployerID in this case)?
您需要订阅每个工作人员更改的属性,并在生成的集合上引发适当的 PropertyChanged
事件。
然而,另一种选择是使用 WPF's built in ICollectionView filtering而不是公开一个单独的属性。
关于c# - 当一个项目的属性被修改时,在 ObservableCollection 中引发 CollectionChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17846561/