C# Generic ObservableCollection<T> Kullanımı

ObservableCollection<T> yapımız System.Collections.ObjectModel namespace'i altında bulunuyor. İçerisinde aynen List<T> gibi T ile belirttiğimiz tipte elemanlar tutar. List<T> collection yapısından en önemli farkı ise içerisinde CollectionChanged isminde bir event barındırmasıdır. Collection nesnemiz değiştiğinde bu event fire olur ve biz bu sayede collection nesnemiz üzerindeki değişikliklerden haberdar oluruz.

Şimdi örnek bir program ile collection yapımızı inceleyelim:

 public class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public int Age { get; set; }

        public override string ToString()
        {
            return "Fullname: " + Name + " " + Surname + " Age: " + Age;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ObservableCollection<Person> people 
                = new ObservableCollection<Person>();

            // event'i delege ediyoruz
            people.CollectionChanged += people_CollectionChanged;

            people.Add(new Person() 
                { Name = "Salih", Surname = "Sayar", Age = 42 });
            people.Add(new Person() 
                { Name = "Ahmet", Surname = "Yilmaz", Age = 21 });

            people.RemoveAt(0);

            Console.ReadLine();
        }

        private static void people_CollectionChanged(object sender,
  System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            // Ne nedenle bu event calisti?
            Console.WriteLine("nAction for this event: {0}", e.Action);

            // Silindi ise
            if (e.Action == 
   System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
            {
                Console.WriteLine("Silinen insanlar:");
                foreach (Person p in e.OldItems)
                {
                    Console.WriteLine(p.ToString());
                }
                Console.WriteLine();
            }

            // eklendi ise
            if (e.Action == 
    System.Collections.Specialized.NotifyCollectionChangedAction.Add)
            {
                Console.WriteLine("Eklenen insanlar:");
                foreach (Person p in e.NewItems)
                {
                    Console.WriteLine(p.ToString());
                }
            }
        }
    }

Çıktı:



Örnek Proje: ObservableCollectionExample.rar

1 yorum :

  1. person class içinde CollectionChanged tanımlanmamış!

    YanıtlaSil