WPF:如何挂钩ListView的ItemsSource CollectionChanged通知?

我有一个数据绑定到ObservableCollection的ListView …

<ListView x:Name="List1" ItemsSource="{Binding MyList}" />

我似乎无法找到任何在集合发生变化时触发的事件,所以我想我不知何故需要以某种方式挂钩到collectionschanged通知中?我真的不确定该怎么做.

基本上,当集合发生变化时,我想做更多的工作,而不是ListView在更新它的列表时所做的工作.

默认情况下,ItemsSource的类型为 IEnumerable.您需要首先强制转换为可以访问 CollectionChanged事件的类型,然后为该事件添加处理程序.

((INotifyCollectionChanged)List1.ItemsSource).CollectionChanged +=
    new NotifyCollectionChangedEventHandler(List1CollectionChanged);

public void List1CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
{
    // Your logic here
}

注意:我在我的示例中将其转换为INotifyCollectionChanged,但您可以将其强制转换为任何实现它的对象.但是,作为最佳实践,您应该转换为最通用的类​​型,使您可以访问所需的方法/属性/事件.因此,虽然您可以将其强制转换为ObservableCollection,但您不需要. INotifyCollectionChanged包含您需要的事件,如果您决定使用实现它的其他类型的集合,这将继续工作,而转换为ObservableCollection意味着如果您有一天决定您的列表现在是MyOwnTypeOfObservableCollectionNotDerivedFromObservableCollection类型比这会打破. 😉

附:这应该在xaml代码隐藏中.

相关文章
相关标签/搜索