您的位置:首页 > 其它

ObservableCollection<T> 类

2011-04-09 16:38 162 查看
表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。

命名空间: System.Collections.ObjectModel
程序集:
System(在 System.dll 中)
用于 XAML 的 XMLNS:未映射到
xmlns。

语法:

[SerializableAttribute]
public class ObservableCollection<T> : Collection<T>,
INotifyCollectionChanged, INotifyPropertyChanged

在许多情况下,所使用的数据是对象的集合。例如,数据绑定中的一个常见方案是使用
ItemsControl(如 ListBoxListViewTreeView)来显示记录的集合。

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

WPF 提供 ObservableCollection<
addToLanSpecTextIdSet('ID0ECADAFGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAADAFGAAAAA?cs=>|vb=)|cpp=>|nu=)');
类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。

在实现自己的集合之前,请先考虑使用
ObservableCollection<
addToLanSpecTextIdSet('ID0ECAHCEGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAAHCEGAAAAA?cs=>|vb=)|cpp=>|nu=)');
或一个现有的集合类,如 List<
addToLanSpecTextIdSet('ID0ECAFCEGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAAFCEGAAAAA?cs=>|vb=)|cpp=>|nu=)');
、 Collection<
addToLanSpecTextIdSet('ID0ECADCEGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAADCEGAAAAA?cs=>|vb=)|cpp=>|nu=)');
和 BindingList<
addToLanSpecTextIdSet('ID0ECABCEGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAABCEGAAAAA?cs=>|vb=)|cpp=>|nu=)');
等。 如果有高级方案并且希望实现自己的集合,请考虑使用 IList,它提供可以通过索引逐个访问的对象的非泛型集合。 如果实现 IList,则将使用数据绑定引擎提供最佳性能。

关于 XAML 用法的说明

ObservableCollection<
addToLanSpecTextIdSet('ID0ECABBCAGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAABBCAGAAAAA?cs=>|vb=)|cpp=>|nu=)');
可在 Windows Presentation Foundation (WPF) 3.0 和 3.5 版本中的一个 XAML
对象元素使用。 但是,使用情况有众多限制。

ObservableCollection<
addToLanSpecTextIdSet('ID0ECAFAACBAGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAAFAACBAGAAAAA?cs=>|vb=)|cpp=>|nu=)');
必须是根元素,因为指定泛型 ObservableCollection<
addToLanSpecTextIdSet('ID0ECADAACBAGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAADAACBAGAAAAA?cs=>|vb=)|cpp=>|nu=)');
的约束类型所必须使用的 x:TypeArguments
特性只在根元素的对象元素上受支持。

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

ObservableCollection<
addToLanSpecTextIdSet('ID0ECABBAABAGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAABBAABAGAAAAA?cs=>|vb=)|cpp=>|nu=)');
所在的命名空间和程序集最初未映射到默认的 XML 命名空间。 您必须为该命名空间和程序集映射一个前缀,然后在 ObservableCollection<
addToLanSpecTextIdSet('ID0ECABAAABAGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAABAAABAGAAAAA?cs=>|vb=)|cpp=>|nu=)');
的对象元素标记上使用该前缀。

在应用程序中使用 XAML 的
ObservableCollection<
addToLanSpecTextIdSet('ID0ECADBAAGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAADBAAGAAAAA?cs=>|vb=)|cpp=>|nu=)');
功能的一种更直接的方法是声明自己的非泛型自定义集合类,该类派生自 ObservableCollection<
addToLanSpecTextIdSet('ID0ECABBAAGAAAAA?cs=<|vb=(Of |cpp=<|nu=(');
T>
addToLanSpecTextIdSet('ID0EAABBAAGAAAAA?cs=>|vb=)|cpp=>|nu=)');
并将其约束为特定类型。 然后映射包含此类的程序集,并将其作为
XAML 中的对象元素进行引用。

public class NameList : ObservableCollection<PersonName>
{
public NameList() : base()
{
Add(new PersonName("Willa", "Cather"));
Add(new PersonName("Isak", "Dinesen"));
Add(new PersonName("Victor", "Hugo"));
Add(new PersonName("Jules", "Verne"));
}
}

public class PersonName
{
private string firstName;
private string lastName;

public PersonName(string first, string last)
{
this.firstName = first;
this.lastName = last;
}

public string FirstName
{
get { return firstName; }
set { firstName = value; }
}

public string LastName
{
get { return lastName; }
set { lastName = value; }
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: