Merhaba,
Xamarin ile geliştirdiğimiz uygulamalarımızda data-binding işlemlerini yaparken verilerimizi duruma göre nasıl işleyebileceğimizi/değiştirebileceğimizi ve yönetebileceğimizi göreceğiz.
Örnek vererek anlatmak gerekirse, elimizde bir veri kümesinin olduğunu ve bunu xamarin forms sayfamızda listelemek istediğimizi düşünelim.
Cinsiyet ve doğum tarihi verisini binding işleminde convert edip, gelen cinsiyet verisine göre renk gösterimi, gelen doğum tarihi verisine göre hesaplama yaparak yaş gösterimini gerçekleştireceğiz.
Bu gibi istekler için Xamarin IValueConverter interface'i ile bize çözüm sağlıyor.
Bu tarz istekler değişikliğe açıktır. Kolay yönetilebilmesi ve ihtiyaç duyulan her yerde kullanılabilmesi için biz geliştiriciler bu gibi istekleri uygulama seviyesinde tanımlarız.
Yeni bir Xamarin Forms Protable Class Library projesi açıyorum.. (evet yine örneğimizin en zor kısmı burası!)
Xamarin Forms Dynamic Resources ve Theme Mantığı konusunu okumanızı tavsiye ediyorum..
Person sınıfımı ve Gender enum değerlerimi ekliyorum.
BindPerson sınıfımızı yazıyoruz.
Verilerimi binding sırasında convert işlemine sokacağım sınıfları yazıyoruz.
Gender Converter
Kodlar üzerinde biraz konuşmamız gerekiyor..
Sınıfımızın IValueConverter interface'inden türediğini ve IValueConverter interface'inin bize Convert ve ConvertBack adında 2 adet metot getirdiğini görüyoruz.
Convert
Convert işlemine sokulan verinin girdiği ilk metot. Buradaki value parametresi bind edilen veri, targetType parametresi ise dönüştürülmek istenen tiptir. parameter değeri ek olarak verilen diğer parametreler, culture ise o an kullanılan CultureInfo'yu işaret etmektedir.
ConvertBack
Dönüştürme işleminden sonra sizin belirlediğiniz kurallar doğrultusunda işleminizi geri alma, veya işleminizde başka durumları yönetebileceğiniz, Convert metodundan sonra çalışan ve parametrelerine Convert metodunun sonucu alan metotdur.
ConvertBack metodunu kullanmak istediğiniz kontrolde binding mode'u TwoWay olarak seçilmelidir. Xamarin.Forms.BindingMode
Bu örneğimizde TwoWay bir işlem yapmayacağız.
Yaptığımız işlemi açıklamak gerekirse, gelen value parametresi'nin değerine göre geriye Color tipini döndürdüğümüzü görüyoruz.
Birthday Converter
Gelen value parametersine göre yaş hesabı yapıp geriye yaş değerini döndürüyoruz.
Şimdi uygulama seviyesinde bu converter işlemlerini resource olarak bağlamamız gerekiyor.
App sınıfımı App.xaml ile değiştiriyorum ve xaml kısmını resimdeki şekilde düzenliyorum.
Kodlarımızı okuyalım..
xmlns:cvt="clr-namespace:XamarinConverters.Converters;assembly=XamarinConverters"
Örneğimizdeki en önemli kısımlardan biri xml namespace tanımlaması yaparak Convert sınıflarımızı resource işlemlerine tanıtmak.
xmlns:cvt : cvt değişkeni tamamen benim verdiğim bir isim
clr-namespace : Convert sınıflarımı işaret eden kısım
assembly : Uygulamamı işaret eden kısım
Burası gözünüzü korkutan bir durum olmasın ve durum kontrolüne şu şekilde yaklaşabilirsiniz;
Projeyi açtığım isim assembly ve Converter sınıflarımızı yazdığım klasör Converters ve clr-namespace ise assembly.klasör adı
Application.Resource
cvt:GenderConverter : Converter sınıflarımı işaret ettiğim tanımlama ile GenderConverter sınıfımı bu şekilde çağırabiliyorum ve x:Key ile xaml tarafta kullanabiliyorum.
cvt:GenderConverter buradaki GenderConverter sınıf adım ile aynı olmalıdır.
Male değeri geldiğinde geriye Blue, Female değeri geldiğinde geriye Pink değerini döndürecek.
cvt:BirthdayConverter : Tüm yaş hesabı işlemleri içerde yapıldığı için sadece tanımlamasını yazıyoruz.
Views klasörü altına ListPage sayfamı ekliyorum.
App.xaml sayfamdaki x:Key ile yaptığım tanımlamaları kullanıp Converter parametresinde işlemlerimi gerçekleştiriyorum.
BoxView'e gelen Gender değerine göre renk, label'a gelen BirthDate değerine göre yaş verilerini göstereceğiz.
Debug
value ve targetType parametrelerimin değerlerini debug ortamında görebiliyoruz.
Gelen değer Gender, dönüşen değer Color
Xamarin teknolojisini kullanırken bu gibi durumları kolay, esnek ve rahat bir şekilde nasıl yönetebileceğimizi gördük.
Görüşmek üzere
Kaynak kodları ilgili linkten indirebilirsiniz.
Post A Reply