Esta documentación está archivada y no tiene mantenimiento.

ObservableCollection<T> (Clase)

Actualización: Julio de 2008

Representa una recolección de datos dinámica que proporciona notificaciones cuando se agregan o se quitan elementos o cuando se actualiza toda la lista.

Espacio de nombres:  System.Collections.ObjectModel
Ensamblado:  WindowsBase (en WindowsBase.dll)
XMLNS para XAML: No asignado a un xmlns.

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

J# admite el uso de APIs genéricas pero no admite la declaración de nuevas API.
JScript no admite el uso de métodos ni tipos genéricos.

                    Vea Comentarios.
                

Parámetros de tipo

T

En muchos casos, los datos con los que se trabaja son una colección de objetos. Por ejemplo, un escenario común en el enlace de datos es el uso de un control ItemsControl como ListBox, ListView o TreeView para mostrar una colección de registros.

Es posible enumerar cualquier colección que implementa la interfaz IEnumerable. Sin embargo, para configurar enlaces dinámicos de modo que las inserciones o eliminaciones que se realicen en la colección actualicen la interfaz de usuario de forma automática, la colección debe implementar la interfaz INotifyCollectionChanged. Esta interfaz expone el evento CollectionChanged, que debe provocarse siempre que se realicen cambios en la colección subyacente.

WPF proporciona la clase ObservableCollection<T>, que es una implementación integrada de una recolección de datos que implementa la interfaz INotifyCollectionChanged.

Antes de implementar su propia colección, considere la posibilidad de utilizar ObservableCollection<T> o una de las clases de colección existentes, como List<T>, Collection<T>y BindingList<T>, entre otras muchas. Si cuenta con un escenario avanzado y desea implementar su propia colección, considere la posibilidad de utilizar IList, que proporciona una colección no genérica de objetos a los que se puede obtener acceso individualmente por índice. La implementación de IList proporciona el mayor rendimiento con el motor de enlace de datos.

ms668604.alert_note(es-es,VS.90).gifNota:

Para que se admita totalmente la transferencia de los valores de datos desde los objetos de origen de enlace hasta los destinos de enlace, cada objeto de la colección que admita propiedades enlazables deberá implementar un mecanismo de notificación de cambio de propiedades adecuado, como la interfaz INotifyPropertyChanged.

Para obtener más información, vea "Enlazar a colecciones" en Información general sobre el enlace de datos.

Notas sobre uso de XAML

ObservableCollection<T> puede usarse como un elemento de objeto XAML en Windows Presentation Foundation (WPF), en las versiones 3.0 y 3.5. Sin embargo, su uso presenta importantes limitaciones.

  • El objeto ObservableCollection<T> debe ser el elemento raíz porque el atributo x:TypeArguments que debe usarse para especificar el tipo restringido del objeto ObservableCollection<T> genérico solo se admite en el elemento de objeto para el elemento raíz.

  • Debe declarar un atributo x:Class (que implica que la acción de compilación de este archivo XAML debe ser Page o alguna otra acción de compilación que compile el XAML).

  • El objeto ObservableCollection<T> se encuentra en un espacio de nombres y ensamblado que no están asignados inicialmente al espacio de nombres XML predeterminado. Debe asignar un prefijo al espacio de nombres y ensamblado y, a continuación, usar dicho prefijo en la etiqueta del elemento de objeto para ObservableCollection<T>.

Un modo más sencillo de usar las capacidades de ObservableCollection<T> de XAML en una aplicación es declarar su propia clase de colección personalizada no genérica que se derive de ObservableCollection<T> y restringirla a un tipo específico. A continuación, asigne el ensamblado que contenga esta clase y haga referencia a él como un elemento de objeto en el XAML.

En este ejemplo se muestra cómo crear y enlazar una colección que se deriva de la clase ObservableCollection<T>, que es una clase de colección que proporciona notificaciones cuando se agregan o quitan elementos.

En el siguiente ejemplo de código se muestra la implementación de una colección NameList.

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; }
      }
  }


Puede hacer que la colección esté disponible para enlazarla de la misma manera que con otros objetos de common language runtime (CLR), como se describe en Cómo: Hacer que los datos estén disponibles para el enlace en XAML. Por ejemplo, puede crear instancias de la colección en XAML y especificar la colección como un recurso, como se muestra aquí:


<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:c="clr-namespace:SDKSample"
  x:Class="SDKSample.Window1"
  Width="400"
  Height="280"
  Title="MultiBinding Sample">
	
  <Window.Resources>
    <c:NameList x:Key="NameListData"/>


...


</Window.Resources>


A continuación, puede enlazar la colección:

<ListBox Width="200"
         ItemsSource="{Binding Source={StaticResource NameListData}}"
         ItemTemplate="{StaticResource NameItemTemplate}"
         IsSynchronizedWithCurrentItem="True"/>


La definición de NameItemTemplate no se muestra aquí. Para obtener el ejemplo completo, vea Ejemplo Implementing Parameterized MultiBinding.

ms668604.alert_note(es-es,VS.90).gifNota:

Los objetos de la colección deben cumplir los requisitos descritos en Información general sobre orígenes de enlaces. En particular, si utiliza OneWay o TwoWay (por ejemplo, si desea que la interfaz de usuario se actualice cuando cambien dinámicamente las propiedades de origen), debe implementar un mecanismo apropiado de notificación de cambio de propiedad, como la interfaz INotifyPropertyChanged.

Para obtener más información, consulte la sección Enlazar a colecciones en Información general sobre el enlace de datos.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0

Fecha

Historial

Motivo

Julio de 2008

Se ha agregado un nuevo miembro: el constructor ObservableCollection<T>.

Cambio de características de SP1.

Mostrar: