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

mic*_*ael 4 wpf listview observablecollection inotifycollectionchanged itemssource

我有一个ListView数据绑定到ObservableCollection...

<ListView x:Name="List1" ItemsSource="{Binding MyList}" />
Run Code Online (Sandbox Code Playgroud)

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

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

m-y*_*m-y 17

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

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

public void List1CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
{
    // Your logic here
}
Run Code Online (Sandbox Code Playgroud)


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

PS这应该在xaml代码隐藏中.