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代码隐藏中.