是什么导致UI时ItemsControl.ItemsSource改变更新吗?(What trigge

2019-10-16 14:12发布

我只是在寻找到的BindingList和的ObservableCollection的区别如下这个问题: 为什么不能在的BindingList WPF

作为其中的一部分,我测试了一个ItemsControl的的ItemsSource绑定到不同类型,包括列表,收藏的ObservableCollection和的BindingList。

让我吃惊的是,当任何一个的ObservableCollection或的BindingList进行了修改界面更新,但不是在其他人。 那么,什么是WPF听取了导致更新? 它不可能是INotifyCollectionChanged事件,因为我以前认为,因为的BindingList没有实现这一点。 困惑的。

Answer 1:

绑定列表如下:

  public class BindingList<T> : Collection<T>, IBindingList, IList, ICollection, IEnumerable, ICancelAddNew, IRaiseItemChangedEvents
  {

IRaiseItemChangedEvents表示该对象类转换属性更改事件的ListChanged事件。 BindingList本身具有ListChanged事件是什么WPF必须听。

如果事实上,它看起来像IRaiseItemChangedEvents被忽略,但有一个BindingListCollectionView包含

    // subscribe to change notifications
    private void SubscribeToChanges () 
    {
        if (InternalList.SupportsChangeNotification)
        {
            InternalList.ListChanged += new ListChangedEventHandler(OnListChanged); 
        }
    } 

和构造函数一样

    /// <summary> 
    /// Constructor
    /// </summary>
    /// <param name="list">Underlying IBindingList</param>
    public BindingListCollectionView(IBindingList list) 
        : base(list)
    { 
        InternalList = list; 

我建议你弄个DotPeek ,看看自己。



文章来源: What triggers UI to update when ItemsControl.ItemsSource changed?