gpt4 book ai didi

c# - 当一个项目的属性被修改时,在 ObservableCollection 中引发 CollectionChanged

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:58 24 4
gpt4 key购买 nike

我正在尝试将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com