Xamarin Forms Veri Dönüşümü/Yönetimi İşlemleri ve IValueConverter Kullanımı

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.

Person Gender

BindPerson sınıfımızı yazıyoruz.

Person Binding


Verilerimi binding sırasında convert işlemine sokacağım sınıfları yazıyoruz.

Gender Converter

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

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.

Appxaml

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ı

clr-namespace-assembly

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.

ListPagexaml

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 TargetType

value ve targetType parametrelerimin değerlerini debug ortamında görebiliyoruz.

Gelen değer Gender, dönüşen değer Color


droid WinPhone

 

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.

Yiğit

Xamarin Developer, Consultant & Architect. Community Leader and Director of Xamarin Türkiye

Post A Reply