我有一个具有ItemsSource
依赖项属性的UserControl,其类型为IList。
如何将IList强制转换为ObservableCollection<T>
。但是我只知道T
的类型。我的用户控件是非通用的。另外,我也不能更改其参考。
这样,我想捕获ObservableCollection的CollectionChanged
事件
我尝试了这个,但是它会产生编译错误。
public IEnumerable ItemsSource
{
get { return (IList)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
private void OnItemsSourceChanged()
{
Type type = ItemsSource.GetType().GetGenericArguments().ElementAt(0);
ObservableCollection<object> list = ItemsSource.Cast<object>();
list.CollectionChanged += list_CollectionChanged;
}
答案 0 :(得分:1)
CollectionChanged
在INotifyCollectionChanged接口中定义。 ObservableCollection<T>
实现INotifyCollectionChanged。
因此,为了预订事件,您可以将ItemsSource强制转换为INotifyCollectionChanged:
var list = ItemsSource as INotifyCollectionChanged;
if (list != null)
list.CollectionChanged += list_CollectionChanged;