修改项目的属性时,在ObservableCollection中提升CollectionChanged

时间:2013-07-24 23:29:37

标签: c# observablecollection

我正在尝试将ObservableCollection的LINQ查询的结果绑定到我的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),我怎样才能获得相同的结果?

1 个答案:

答案 0 :(得分:0)

  

如果只修改了一个项目(例如在这种情况下是Workers'EmployerID),我怎样才能获得相同的结果?

您需要订阅每个工作人员更改的属性,并在生成的集合上引发相应的PropertyChanged事件。

然而,另一个选择是使用WPF's built in ICollectionView filtering而不是公开单独的属性。