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)