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

时间:2016-04-22 12:19:27

标签: c# wpf xaml

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

使用Reflection我尝试在IEnumarable集合中添加新项目,我尝试了以下场景,但在IEnumarable集合中添加新项目时无法通知集合已更改,是否有其他解决方案。

尝试下面一个,IEnumarable集合没有得到更新。

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

尝试下面一个,IEnumarable集合已更新,但未触发集合更改事件。

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

1 个答案:

答案 0 :(得分:0)

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

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

如果您这样做,请将IEnumerable转换为ICollection<ElementType>并使用添加方法。

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

如果不这样做,则集合很可能仍然实现非通用IList接口。您可以转换为该并调用Add there。

((IList)ItemsSource).Add(NewItemsSourceAppointment)

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

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

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