在将项目添加到 IEnumerable 集合时通知集合已更改

本文关键字:集合 通知 IEnumerable 项目 添加 | 更新日期: 2024-11-06 03:56:08

我的要求是项目应该添加到 IEnumerable 集合中,并且应该在项目添加/删除时触发集合更改事件。

使用反射,我尝试在 IEnumarable 集合中添加新项目,我尝试了以下情况,但在 IEnumarable 集合中添加新项目时无法通知集合更改,这是任何其他解决方案。

尝试以下一个,IEnummarable集合没有得到更新。

((IEnumerable<object>)ItemsSource).ToList().Add(NewItemsSourceAppointment);

尝试以下一个,IEnummarable 集合已更新但不触发集合更改事件。

ItemsSource = ((IEnumerable<object>)ItemsSource).Concat(new[] { NewItemsSourceAppointment });

在将项目添加到 IEnumerable 集合时通知集合已更改

您正在向新创建的列表中添加元素。 List<T> 不会将任何新添加的元素转发到任何其他集合,因此您必须将元素添加到原始集合。

有两种可能性,要么你知道对象的类型,要么不知道。

如果这样做,请将IEnumerable强制转换为ICollection<ElementType>并使用 Add 方法。

((ICollection<T>)ItemsSource).Add(NewItemsSourceAppointment)

如果不这样做,则集合很有可能仍实现非泛型IList接口。您可以投射到那里并在那里调用 Add。

((IList)ItemsSource).Add(NewItemsSourceAppointment)

对于大多数集合接口,后者很好。

但是,也可能是上述方法都不起作用,那是当您的 ItemsSource 集合是只读时,例如 Select 调用的结果。

编辑:这会将您的元素添加到集合中。集合是否要触发集合更改事件取决于集合实现。