如何将IList转换为ObservableCollection

问题描述 投票:1回答:1

我有一个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;
}
c# wpf observablecollection
1个回答
1
投票

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

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

var list = ItemsSource as INotifyCollectionChanged;
if (list != null)
    list.CollectionChanged += list_CollectionChanged;
© www.soinside.com 2019 - 2024. All rights reserved.