zoukankan      html  css  js  c++  java
  • Interpreting NotifyCollectionChangedEventArgs zz

    If you’ve ever consumed INotifyCollectionChanged.CollectionChanged, then you’ve run into some inadequate documentation for NotifyCollectionChangedEventArgs. I’ve added the following information to the MSDN “community extensions” (my first contribution), but others have had problems with the stability of community extensions, so the results of my research and Reflector spelunking are also in this blog entry.

    In short, the value of the Action property determines the validity of other properties in this class. NewItems and OldItems are null when they are invalid; NewStartingIndex and OldStartingIndex are -1 when they are invalid.

    If Action is NotifyCollectionChangedAction.Add, then NewItems contains the items that were added. In addition, if NewStartingIndex is not -1, then it contains the index where the new items were added.

    If Action is NotifyCollectionChangedAction.Remove, then OldItems contains the items that were removed. In addition, if OldStartingIndex is not -1, then it contains the index where the old items were removed.

    If Action is NotifyCollectionChangedAction.Replace, then OldItems contains the replaced items and NewItems contains the replacement items. In addition, NewStartingIndex and OldStartingIndex are equal, and if they are not -1, then they contain the index where the items were replaced.

    If Action is NotifyCollectionChangedAction.Move, then NewItems and OldItems are logically equivalent (i.e., they are SequenceEqual, even if they are different instances), and they contain the items that moved. In addition, OldStartingIndex contains the index where the items were moved from, and NewStartingIndex contains the index where the items were moved to. A Move operation is logically treated as a Remove followed by an Add, so NewStartingIndex is interpreted as though the items had already been removed.

    If Action is NotifyCollectionChangedAction.Reset, then no other properties are valid.

    Sources

    There are two blog entries that helped me get started: Making Sense of NotifyCollectionChangedEventArgs and An Alternative to ObservableCollection. However, more details were still lacking; fortunately, Reflector saved the day! The primary .NET sources were: [WindowsBase.dll, 3.0.0.0] System.Collections.ObjectModel.ObservableCollection<T> - SetItemRemoveItemMoveItem, etc.; and [PresentationFramework.dll, 3.0.0.0] System.Windows.Data.CollectionView - ProcessCollectionChangedAdjustCurrencyFor*.

  • 相关阅读:
    iview使用之怎样给Page组件添加跳转按钮
    iview使用之怎样通过render函数在table组件表头添加图标及判断多个状态
    iview使用之怎样通过render函数在tabs组件中添加标签
    在HTML中使用JavaScript
    文档对象模型-DOM
    JavaScript之数组去重
    JavaScript之预编译
    自我总结的一些常问面试题-2018上海
    【知识点】KMP算法详解
    【讲题】Galaxy OJ 树形DP专题
  • 原文地址:https://www.cnblogs.com/xpvincent/p/10357471.html
Copyright © 2011-2022 走看看