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

标签 c# observablecollection

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

相关文章:

c# - ObservableCollection<T> 项目更新事件

c# - 有没有一种方法可以使用ObservableCollection和MVVM刷新WPF DataGrid,而无需通知ItemsSource集合?

c# - 数据绑定(bind)到不同 UserControl 中的 ObservableCollection - 如何保留当前选择?

c# - 如何使用 C# 应用程序连接到 telnet 的 tcp 端口 23?

c# - 从 google 搜索中获取前 1000 个结果

c# - ASP.NET 请求扩展类型

c# - WPF:将列表绑定(bind)到列表框

Visual Studio 2015 生成的 C# 代码使用 .NET 类型而不是 C# 关键字

c# - 在 MS Excel 中打开时无法写入文件

listview - Xamarin ListView 绑定(bind)到 ObservableCollection 随机更改