在将项目添加到 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 });
您正在向新创建的列表中添加元素。 List<T>
不会将任何新添加的元素转发到任何其他集合,因此您必须将元素添加到原始集合。
有两种可能性,要么你知道对象的类型,要么不知道。
如果这样做,请将IEnumerable
强制转换为ICollection<ElementType>
并使用 Add 方法。
((ICollection<T>)ItemsSource).Add(NewItemsSourceAppointment)
如果不这样做,则集合很有可能仍实现非泛型IList
接口。您可以投射到那里并在那里调用 Add。
((IList)ItemsSource).Add(NewItemsSourceAppointment)
对于大多数集合接口,后者很好。
但是,也可能是上述方法都不起作用,那是当您的 ItemsSource 集合是只读时,例如 Select 调用的结果。
编辑:这会将您的元素添加到集合中。集合是否要触发集合更改事件取决于集合实现。