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:
Çıktı:
Örnek Proje: ObservableCollectionExample.rar
Ş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
person class içinde CollectionChanged tanımlanmamış!
YanıtlaSil