如何将IList强制转换为ObservableCollection <t>

时间:2018-09-05 14:28:09

标签: c# wpf observablecollection

我有一个具有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;
}

1 个答案:

答案 0 :(得分:1)

CollectionChanged在INotifyCollectionChanged接口中定义。 ObservableCollection<T>实现INotifyCollectionChanged。

因此,为了预订事件,您可以将ItemsSource强制转换为INotifyCollectionChanged:

var list = ItemsSource as INotifyCollectionChanged;
if (list != null)
    list.CollectionChanged += list_CollectionChanged;