Bugün WPF’de veri filtrelemenin ve sıralamanın nasıl yapılabileceği hakkında birkaç sınıf göstermek istiyorum.Bildiğiniz gibi WPF çok güçlü bir data binding yapısına sahip.Bu sayede bir koleksiyonu bir görsele bind etmemizi mümkün kılar.Fakat sıralama ve filtreleme için ek işlemler gerekmektedir.Tam da bu noktada devreye  CollectionView sınıfı giriyor.Bu sınıf sayesinde filtreleme, sıralama ve hatta gruplama işlemlerini kolayca yapabiliriz.

Filtreleme

CollectionView nesnemizi filtrelemek için bir callback metod tanımlamalıyız.Bu metodda filtreleme işlemi yapılacaktır.Ayrıca bu metodumuzun geridönüş değeri bool olmalı ve object tipinden de parametre almalıdır.Burada unutulmaması gereken en önemli nokta filtreleme metni değiştiğinde CollectionView nesnemizin Refresh() fonksiyonunun çağırılmasıdır.Eğer çağrılmazsa nesnemiz herhangi bir değişiklik olsa bile yenilenmediği için bu değişiklikten habersiz olacaktır ve filtreleme yapmayacaktır.

IList<Employer> employers;

ICollectionView _employerView;

private string _filterString=string.Empty;

public Window1()

{

   InitializeComponent();

   //çalışanların listesini alıyoruz

   employers = GetCustomers();

   //Koleksiyonumuzu CollectionView nesnemize yüklüyoruz

   _employerView = CollectionViewSource.GetDefaultView(employers);

   //CollectionView nesnemizin filtreleme predicate ini belirtiyoruz

   _employerView.Filter = EmployerFilter;

   this.Loaded += new RoutedEventHandler(Window1_Loaded);

}

   //Callback Metodu

public bool EmployerFilter(object item)

{

   Employer employer = item as Employer;

   return employer.Name.ToLower().StartsWith(_filterString.ToLower());

}

   //Filtreleme metni property miz

public string FilterString

{

   get { return _filterString; }

   set{

    _filterString = value; 

    OnPropertyChanged("FilterString");

    _employerView.Refresh();

 }   

}

Sıralama

CollectionView sınıfı ile sıralama işlemlerini de oldukça rahat yapabilmekteyiz.İlgili nesneyi oluştururken sadece sıralamak istediğimiz property ismini ve sıralama yönünü girmemiz yeterlidir.Örneğin:

_employerView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

Görüldüğü gibi tek satırla sıralama işlemini yapmış olduk.Bu sıralamayı Employer nesnemizdeki  Name property’sine göre artan bir şekilde yapmasını belirtmiş olduk.Örnek uygulamayı aşağıdaki linkten indirebilirsiniz.

Kolay gelsin.

Demo.zip (34,44 kb)

About the Author