相关文章推荐
酷酷的松鼠  ·  tomcat ...·  1 年前    · 
瘦瘦的仙人球  ·  python django ...·  1 年前    · 
generic <typename T>
public ref class ObservableCollection : System::Collections::ObjectModel::Collection<T>, System::Collections::Specialized::INotifyCollectionChanged, System::ComponentModel::INotifyPropertyChanged
public class ObservableCollection<T> : System.Collections.ObjectModel.Collection<T>, System.Collections.Specialized.INotifyCollectionChanged, System.ComponentModel.INotifyPropertyChanged
[System.Serializable]
public class ObservableCollection<T> : System.Collections.ObjectModel.Collection<T>, System.Collections.Specialized.INotifyCollectionChanged, System.ComponentModel.INotifyPropertyChanged
type ObservableCollection<'T> = class
    inherit Collection<'T>
    interface INotifyCollectionChanged
    interface INotifyPropertyChanged
[<System.Serializable>]
type ObservableCollection<'T> = class
    inherit Collection<'T>
    interface INotifyCollectionChanged
    interface INotifyPropertyChanged
Public Class ObservableCollection(Of T)
Inherits Collection(Of T)
Implements INotifyCollectionChanged, INotifyPropertyChanged

在许多情况下,你使用的数据是 对象的集合。 例如,数据绑定中的常见方案是使用 ItemsControl (如 、 ListView TreeView ListBox 来显示记录集合。

你可以枚举实现 IEnumerable 接口的任何集合。 但是,若要设置动态绑定,以便集合中的插入或删除操作可以自动更新 UI,则集合必须实现 INotifyCollectionChanged 接口。 此接口公开 CollectionChanged 事件,只要基础集合发生更改,就会引发该事件。

WPF 提供 ObservableCollection<T> 类,该类是实现 INotifyCollectionChanged 接口的数据收集的内置实现。

在实现自己的集合前,请考虑使用 ObservableCollection<T> 或现有集合类之一,例如 List<T> Collection<T> BindingList<T> 等。 如果你有一个高级方案并且想要实现自己的集合,请考虑使用 IList ,它提供可由索引单独访问的对象的非泛型集合。 实现 IList 提供数据绑定引擎的最佳性能。

若要完全支持将数据值从绑定源对象传输到绑定目标,集合中支持可绑定属性的每个对象都必须实现适当的属性更改通知机制,例如 INotifyPropertyChanged 接口。

有关详细信息,请参阅 数据绑定概述 中的“绑定到集合”。

有关 XAML 用法的说明

ObservableCollection<T> 可用作 Windows Presentation Foundation (WPF) 3.0 和 3.5 版中的 XAML 对象元素。 但是,使用存在很大的限制。

  • ObservableCollection<T> 必须是根元素,因为 x:TypeArguments 必须用于指定泛型 ObservableCollection<T> 约束类型的特性仅在根元素的对象元素上受支持。

  • 必须声明属性 x:Class (这要求此 XAML 文件的生成操作必须是 Page 或编译 XAML) 的某个其他生成操作。

  • ObservableCollection<T> 位于最初未映射到默认 XML 命名空间的命名空间和程序集中。 必须映射命名空间和程序集的前缀,然后在 的对象元素标记上 ObservableCollection<T> 使用该前缀。

    在应用程序中使用 ObservableCollection<T> 来自 XAML 的功能的更直接方法是声明你自己的派生自 ObservableCollection<T> 的非泛型自定义集合类,并将其约束为特定类型。 然后映射包含此类的程序集,并在 XAML 中将其引用为对象元素。

    ToImmutableDictionary<TSource,TKey,TValue>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TValue>, IEqualityComparer<TKey>, IEqualityComparer<TValue>)

    枚举并转换序列,然后使用指定的键和值比较器生成其内容的不可变字典。

    GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>)

    根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。 通过使用指定的比较器对键值进行比较,并且通过使用指定的函数对每个组的元素进行投影。

    GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)

    基于键值等同性对两个序列的元素进行关联,并对结果进行分组。 使用默认的相等比较器对键进行比较。

    GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)

    基于键值等同性对两个序列的元素进行关联,并对结果进行分组。 使用指定的 IEqualityComparer<T> 对键进行比较。

    Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>, IEqualityComparer<TKey>)

    基于匹配键对两个序列的元素进行关联。 使用指定的 IEqualityComparer<T> 对键进行比较。

  •