WPF:如何 Hook 到 ListView 的 ItemsSource CollectionChanged 通知?

标签 wpf listview observablecollection itemssource inotifycollectionchanged

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

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

我似乎找不到任何在集合更改时触发的事件,所以我想我需要以某种方式 Hook 到 collectionchanged 通知?我不确定该怎么做。

基本上,当集合发生变化时,我想做除了 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 代码隐藏中。

关于WPF:如何 Hook 到 ListView 的 ItemsSource CollectionChanged 通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5806172/

相关文章:

wpf按钮点击事件

c# - 绑定(bind)在 ListView 中不起作用

c# - 当鼠标悬停在内部 ListView 上时,ListView 内的 WPF ListView 不滚动

android - 当按下对话框删除按钮时,如何从数据库中删除 ListView 项?

listview - 搜索栏获取文本但不过滤列表

c# - 绑定(bind)到派生集合的 ListView 未更新(XAML/Windows 8)

WPF MVVM INotifyPropertyChanged 实现 - 模型或 View 模型

c# - 绑定(bind)重定向 hell

即使 UICulture 是阿拉伯语,WPF 也使用英语文化资源

php - 如何使用php从mysql数据库中检索所有数据?