我有一个 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/