代码之家  ›  专栏  ›  技术社区  ›  jyoung

ObservableCollection引发“item[]”的属性更改的目的是什么?

  •  4
  • jyoung  · 技术社区  · 16 年前

    ObservableCollection引发“item[]”的属性更改的目的是什么?

    如果我有一个实现inotifyCollectionChanged的类,这是我应该做的吗?

    WPF控件是否以某种方式使用“item[]”的此属性更改?

    2 回复  |  直到 16 年前
        1
  •  4
  •   dtb    16 年前

    ObservableCollection 实现两者 INotifyCollectionChanged INotifyPropertyChanged .

    InotifyProperty已更改 用于指示 可观测采集 已经改变了,就像它的元素数量一样( "Count" )或通过集合的索引器访问的元素( "Item[]" )此外, 可观测采集 器具 不完整收集已更改 以指示哪个元素已正确更改以及如何更改。

    看看 Mono implementation of ObservableCollection 看看什么 可观测采集 确实如此。例如,这里是 InsertItem 方法:

    protected override void InsertItem (int index, T item)
    {
        CheckReentrancy ();
    
        base.InsertItem (index, item);
    
        OnCollectionChanged (new NotifyCollectionChangedEventArgs (
            NotifyCollectionChangedAction.Add, item, index));
        OnPropertyChanged (new PropertyChangedEventArgs ("Count"));
        OnPropertyChanged (new PropertyChangedEventArgs ("Item[]"));
    }
    

    如果你想实现你自己的 可观测采集 -像集合类一样,它似乎是实现 不完整收集已更改 InotifyProperty已更改 .

        2
  •  0
  •   sipsorcery    16 年前

    是WPF和Silverlight控件使用PropertyChange事件更新UI控件。这允许像listview或datagrid这样的东西自动更新以响应其绑定的ObservableCollection或实现inotifyCollectionChanged的其他集合的更改。

    编辑:就实现而言,您通常不需要实现自己的集合,因此不需要为inotifyCollectionChanged而苦恼。对于将在ObservableCollection中使用的类,需要实现inotifyPropertiesChanged。这允许您的对象在每次更新时触发PropertyChanged事件,这将允许您的UI控件自动显示更改。

    推荐文章