ObservableCollection 类

本文详细介绍了ObservableCollection<T>类的使用方法及其在WPF中的应用场景。此类是.NET Framework提供的一个泛型集合类,实现了INotifyCollectionChanged接口,能够响应集合内数据的变化,并通知UI自动更新。

表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知。

命名空间: 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< T> 类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。

在实现自己的集合之前,请先考虑使用 ObservableCollection< T> 或一个现有的集合类,如 List< T> Collection< T> BindingList< T> 等。 如果有高级方案并且希望实现自己的集合,请考虑使用 IList,它提供可以通过索引逐个访问的对象的非泛型集合。 如果实现 IList,则将使用数据绑定引擎提供最佳性能。

关于 XAML 用法的说明

ObservableCollection< T> 可在 Windows Presentation Foundation (WPF) 3.0 和 3.5 版本中的一个 XAML 对象元素使用。 但是,使用情况有众多限制。

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

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

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

在应用程序中使用 XAML 的 ObservableCollection< T> 功能的一种更直接的方法是声明自己的非泛型自定义集合类,该类派生自 ObservableCollection< T> 并将其约束为特定类型。 然后映射包含此类的程序集,并将其作为 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; }
      }
  }

 

转载于:https://www.cnblogs.com/zhangtao/archive/2011/04/09/2347562.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值