我的要求是项目应该添加到IEnumerable集合中,并且应该在IEnumerable集合中添加/删除项目时触发Collection更改事件。
使用Reflection我尝试在IEnumarable集合中添加新项目,我尝试了以下场景,但在IEnumarable集合中添加新项目时无法通知集合已更改,是否有其他解决方案。
尝试下面一个,IEnumarable集合没有得到更新。
((IEnumerable<object>)ItemsSource).ToList().Add(NewItemsSourceAppointment);
尝试下面一个,IEnumarable集合已更新,但未触发集合更改事件。
ItemsSource = ((IEnumerable<object>)ItemsSource).Concat(new[] { NewItemsSourceAppointment });
答案 0 :(得分:0)
您正在向新创建的列表添加元素。 List<T>
不会将任何新添加的元素转发到任何其他集合,因此您必须将元素添加到原始集合中。
有两种可能性,要么您知道对象的类型,要么您不知道。
如果您这样做,请将IEnumerable
转换为ICollection<ElementType>
并使用添加方法。
((ICollection<T>)ItemsSource).Add(NewItemsSourceAppointment)
如果不这样做,则集合很可能仍然实现非通用IList
接口。您可以转换为该并调用Add there。
((IList)ItemsSource).Add(NewItemsSourceAppointment)
对于大多数集合接口,后者很好。
但是,也可能是上述情况都不起作用,那就是您的ItemsSource集合是只读的,例如Select调用的结果。
编辑:这会将您的元素添加到集合中。该集合是否将触发集合更改事件取决于集合实现。