我有一个UserControl,它有ItemsSource
依赖属性,其类型是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;
}
CollectionChanged
在INotifyCollectionChanged接口中定义。 ObservableCollection<T>
实现了INotifyCollectionChanged。
因此,为了订阅事件,您可以将ItemsSource转换为INotifyCollectionChanged:
var list = ItemsSource as INotifyCollectionChanged;
if (list != null)
list.CollectionChanged += list_CollectionChanged;