Windows Phone 7.1 Value Converter Kullanımı

By Burak TUNGUT - 21.11.2012 - Kategori Windows Phone 8

Windows Phone 7.1 uygulamalarımızda Data Bind'in yanında Value Converter işlemini nasıl yapacağımızı bu makale ile göreceğiz.
Herzamanki gibi küçücük, miniminnacık bir seneryo ile olayı çok daha iyi bir şekilde kavrayacağız..

Öncelikle harika esintili bir Temmuz akşamında, İstanbul'dan biraz da iş yorgunu olarak herkese merhaba :)
Özellikle son 2 haftadır çekilmeyecek kadar sıcak olmaya başlayan İstanbul'da bugün ki güneşin az esintinin bol olduğu bir gün yaşadık ve biraz daha böyle gitmesini ümit ediyorum :)

Daha fazla konumuzu dağıtmadan hemen senaryomuzdan bahsetmek istiyorum.
Uygulamamızın ana sayfasında 1 adet ListBox itemimiz var ve bize verilen makale konu başlıklarının Seo linklerini bu listenin içine atmak istiyoruz. Çok küçük bir örnek verecek olursak,

Konu başlığımız -> "value converter nasıl kullanılır" iken,
Seo Linkimiz -> "value_converter_nasil_kullanilir.html" şeklinde olmalıdır.

Hiç şüphesiz gelen değerimiz biraz replace işlemine tabi tutulacak ve sonuna html eki getirelecek. Olabildiğince basit düşünelim ve bu işi bir method ile yapmak isteyelim.

Kodumuz üç aşağı beş yukarı aşağıdaki gibi olacaktır ;
 

private string getSeoLink(string title)
        {
            string first = "öüıçğş";
            string last = "ouicgs";
            StringBuilder sb = new StringBuilder(title.ToLower().Replace(' ','_'));
            for (int i = 0 ; i < sb.Length ; i++)
            {
                int found = first.IndexOf(sb[i]);
                if (found != -1)
                    sb[i] = last[found];
            }
            return sb.Append(".html").ToString();
        }


Methodumuz istediğimiz fonksiyonaliteyi yerine getirecektir. Fakat web servisten ya da başka bir kaynakdan komplex listeler çektiğimizi düşünün hepsini bu işleme tabi tutmak içinden çıkılamayacak kadar zor olacaktır.

Bunun yerine biz yeni bir sınıf yaratıyor ve IValueConverter arayüzünü implement ediyoruz. Gelecek olan 2 methoddan ise senaryomuz gereği Convert methodu ile ilgileniyoruz, yukarıda yazdığımız kodu aslında aynen içine yazıyor sadece parametre olarak object alıyor olacağımızdan ToString() methodunu kullanıyoruz.

 

 

public class SeoLinkConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string first = "öüıçğş";
            string last = "ouicgs";
            StringBuilder sb = new StringBuilder(value.ToString().ToLower().Replace(' ', '_'));
            for (int i = 0; i < sb.Length; i++)
            {
                int found = first.IndexOf(sb[i]);
                if (found != -1)
                    sb[i] = last[found];
            }
            return sb.Append(".html").ToString();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

 


Aslında daha fazla ilerlemeden, Value Converterımızı bind işlemiyle kesiştirmeden sayfamızın yapılandırıcısına aşağıdaki kodu ekleyelim ;

 

 

 

 

listBox.ItemsSource = new List()
            {
                "burak tungut hakkında",
                "value converter nasıl kullanılır",
                "windows phone makaleleri",
                "şehir bilgisi öğrenme",
                "türkçe karakterli cümlem"
            };

(</string> yazan kısmı dikkate almayınız !)


Sayfamızda ki listemize yazdığımız tüm cümleler aynen yazdığımız gibi eklenecektir. Şimdi bir önceki adımda yaptığımız Converter methodumuzu listBox itemimize bağlamak üzere Expression Blend üzerinden sayfamızı açalım.
Oluşturduğumuz ItemTemplate içine bir adet TextBlock ekleyelim ve Data Bind ekranına gelelim,

Value Converter seçeneği yanındaki butona tıklayıp, IValueConverter arayüzünü implemente eden tek sınıfımızı seçip iki ekranda da OK diyelim ve ekran görüntümüzü inceleyelim.



Expression Blend ile uğraşmak istemeyenler için eklenmesi gereken yerleri kalın olarak gösterdim ; 

 

 

 

<phone:PhoneApplicationPage.Resources>
<local:SeoLinkConverter x:Key="SeoLinkConverter"/>
<DataTemplate x:Key="DataTemplate">
<Grid Height="67">
<TextBlock Margin="0,0,1,0" TextWrapping="Wrap" Text="{Binding Converter={StaticResource SeoLinkConverter}}" d:LayoutOverrides="Width, Height" FontWeight="Bold" FontSize="24"/>
</Grid>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
 
<phone:PhoneApplicationPage.FontFamily>
<StaticResource ResourceKey="PhoneFontFamilyNormal"/>
</phone:PhoneApplicationPage.FontFamily>
<phone:PhoneApplicationPage.FontSize>
<StaticResource ResourceKey="PhoneFontSizeNormal"/>
</phone:PhoneApplicationPage.FontSize>
<phone:PhoneApplicationPage.Foreground>
<StaticResource ResourceKey="PhoneForegroundBrush"/>
</phone:PhoneApplicationPage.Foreground>
 
    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
 
        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>
 
        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="351" VerticalAlignment="Top" Width="450" ItemTemplate="{StaticResource DataTemplate}"/></Grid>
    </Grid>
 
</phone:PhoneApplicationPage>

 


Bir sonraki makalem de görüşmek üzere, esenlikle kalın :)
H. Burak TUNGUT
Bilgisayar Mühendisliği Öğrencisi

 

 

 




















    
    
        
            
            
        

        
        
            
            
        

        
        
         
    


Yorum Bırak

Facebook
Son Yorumlar