Saltar al contenido

¿Cuál es el uso de ObservableCollection en .net?

Diego, miembro de este gran equipo de trabajo, nos ha hecho el favor de escribir este enunciado porque domina a la perfección este tema.

Solución:

ObservableCollection es una colección que permite que el código fuera de la colección sepa cuándo se producen cambios en la colección (agregar, mover, eliminar). Se usa mucho en WPF y Silverlight, pero su uso no se limita a ellos. El código puede agregar controladores de eventos para ver cuándo ha cambiado la colección y luego reaccionar a través del controlador de eventos para realizar un procesamiento adicional. Esto puede ser cambiar una interfaz de usuario o realizar alguna otra operación.

El siguiente código realmente no hace nada, pero demuestra cómo adjuntaría un controlador en una clase y luego usaría los argumentos del evento para reaccionar de alguna manera a los cambios. WPF ya tiene muchas operaciones, como actualizar la interfaz de usuario integrada, por lo que las obtiene de forma gratuita cuando usa ObservableCollections.

class Handler

    private ObservableCollection collection;

    public Handler()
    
        collection = new ObservableCollection();
        collection.CollectionChanged += HandleChange;
    

    private void HandleChange(object sender, NotifyCollectionChangedEventArgs e)
    
        foreach (var x in e.NewItems)
        
            // do something
        

        foreach (var y in e.OldItems)
        
            //do something
        
        if (e.Action == NotifyCollectionChangedAction.Move)
        
            //do something
        
    

Un ObservableCollection funciona esencialmente como una colección regular excepto que implementa las interfaces:

  • INotifyCollectionChanged,
  • INotifyPropertyChanged

Como tal, es muy útil cuando desea saber cuándo ha cambiado la colección. Se desencadena un evento que le indicará al usuario qué entradas se han agregado/eliminado o movido.

Más importante aún, son muy útiles cuando se utiliza el enlace de datos en un formulario.

Desde Pro C# 5.0 y .NET 4.5 Framework

los ObservableCollection La clase es muy útil porque tiene la capacidad de informar a los objetos externos cuando su contenido ha cambiado de alguna manera (como puede suponer, trabajar con
ReadOnlyObservableCollection es muy similar, pero de naturaleza de sólo lectura). En muchos sentidos, trabajar con el ObservableCollection es idéntico a trabajar con List, dado que ambas clases implementan las mismas interfaces principales. ¿Qué hace que el ObservableCollection clase única es que esta clase admite un evento llamado CollectionChanged. Este evento se activará cada vez que se inserte un nuevo elemento, se elimine (o reubique) un elemento actual o si se modifica toda la colección. Como cualquier evento, CollectionChanged se define en términos de un delegado, que en este caso es
NotifyCollectionChangedEventHandler. Este delegado puede llamar a cualquier método que tome un objeto como primer parámetro, y un NotifyCollectionChangedEventArgs como el segundo. Considere el siguiente método Main(), que llena una colección observable que contiene objetos Person y conecta el
CollectionChanged evento:

class Program

   static void Main(string[] args)
   
     // Make a collection to observe and add a few Person objects.
     ObservableCollection people = new ObservableCollection()
     
        new Person FirstName = "Peter", LastName = "Murphy", Age = 52 ,
        new Person FirstName = "Kevin", LastName = "Key", Age = 48 ,
     ;
     // Wire up the CollectionChanged event.
     people.CollectionChanged += people_CollectionChanged;
     // Now add a new item.
     people.Add(new Person("Fred", "Smith", 32));

     // Remove an item.
     people.RemoveAt(0);

     Console.ReadLine();
   
   static void people_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
   
       // What was the action that caused the event?
        Console.WriteLine("Action for this event: 0", e.Action);

        // They removed something. 
        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
        
            Console.WriteLine("Here are the OLD items:");
            foreach (Person p in e.OldItems)
            
                Console.WriteLine(p.ToString());
            
            Console.WriteLine();
        

        // They added something. 
        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
        
            // Now show the NEW items that were inserted.
            Console.WriteLine("Here are the NEW items:");
            foreach (Person p in e.NewItems)
            
                Console.WriteLine(p.ToString());
            
        
   

el entrante NotifyCollectionChangedEventArgs parámetro define dos propiedades importantes,
OldItems y NewItems, que le dará una lista de elementos que estaban actualmente en la colección antes de que se disparara el evento y los nuevos elementos que estaban involucrados en el cambio. Sin embargo, querrá examinar estas listas solo bajo las circunstancias correctas. Recuerde que el evento CollectionChanged puede activarse cuando se agregan, eliminan, reubican o restablecen elementos. Para descubrir cuál de estas acciones desencadenó el evento, puede usar la propiedad Action de NotifyCollectionChangedEventArgs. La propiedad Action se puede probar con cualquiera de los siguientes miembros de la NotifyCollectionChangedAction enumeración:

public enum NotifyCollectionChangedAction

Add = 0,
Remove = 1,
Replace = 2,
Move = 3,
Reset = 4,

Miembros de System.Collections.ObjectModel

Al final de todo puedes encontrar las notas de otros programadores, tú también tienes el poder mostrar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *