WPF:如何挂接到ListView的ItemsSource CollectionChanged通知中?

| 我有一个数据绑定到
ObservableCollection
ListView
...
<ListView x:Name=\"List1\" ItemsSource=\"{Binding MyList}\" />
我似乎找不到在更改集合时触发的任何事件,因此我在想我是否需要以某种方式挂接到collectionchanged通知中?我不太确定该怎么做。 基本上,当集合更改时,我想做一些其他工作,而不是ListView在更新列表时已经做的事情。     
已邀请:
默认情况下,“ 3”的类型为“ 4”。您首先需要转换为可以访问to5ѭ事件的类型,然后为该事件添加处理程序。
((INotifyCollectionChanged)List1.ItemsSource).CollectionChanged +=
    new NotifyCollectionChangedEventHandler(List1CollectionChanged);

public void List1CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
{
    // Your logic here
}
注意:在我的示例中,我将其强制转换为
INotifyCollectionChanged
,但是您可以将其强制转换为实现该目标的任何对象。不过,作为最佳实践,您应该转换为最通用的类​​型,以使您能够访问所需的方法/属性/事件。因此,尽管您可以将其转换为
ObservableCollection
,但无需这样做。
INotifyCollectionChanged
包含您需要的事件,如果您决定使用实现该事件的其他某种类型的集合,它将继续起作用,而强制转换为
ObservableCollection
意味着如果您有一天决定您的列表现在属于该类型
MyOwnTypeOfObservableCollectionNotDerivedFromObservableCollection
会破损。 ;) 附言这应该在xaml代码后面。     
您将不得不将处理程序附加到列表中。或者,使用
CollectionView
并将更改后的事件挂在那里。 在您的后台代码中,如下所示:
MyList.CollectionChanged += new NotifyCollectionChangedEventHandler( this.MyCollectionChanged );


private void SortCollectionChanged( object sender, NotifyCollectionChangedEventArgs e )
{
  Debug.WriteLine( \"Changed\" );
}
    
ObservableCollection {T}公开INotifyCollectionChanged.CollectionChanged事件。当绑定到ItemsSource时,数据绑定引擎将处理从源到项目控件的更改传播,但是如果您需要执行其他处理,则可以将处理程序附加到CollectionChanged事件并使用它提供的NotifyCollectionChangedEventArgs。 假设您的视图模型具有名为MyList的公共属性:
public ObservableCollection<T> MyList
{
  get
  {
    if(_viewModelMyList == null)
    {
      _viewModelMyList = new ObservableCollection<T>;
      _viewModelMyList.CollectionChanged += (o, e) => 
      {
        // code to process change event can go here
        if(e.Action == NotifyCollectionChangedAction.Add)
        {
        }
      };
    }
    return _viewModelMyList;
  }
}
private ObservableCollection<T> _viewModelMyList;
    

要回复问题请先登录注册