Abdurrahman KÖKEN | BLOG

just a developer... | Microsoft Student Partner

Visual Studio 2010 Türkçe Dil Paketi Yayınlandı

Temmuz 06
by Abdurrahman Köken 6. Temmuz 2010 01:02

 

Herkese merhabalar,

Birkaç gün önce Visual Studio 2010 için Türkçe dil paketi yayınlandı.Bu dil paketi şu an için sadece Visual Studio 2010 Professional’ın  İngilizce sürümünün üzerine yüklenebilen bir eklentidir.Eklenti yüklendikten sonra ingilizce ve türkçe dil seçimini yapabilmeniz mümkün.Bu dil paketinin diğer bir özelliği ise İstanbul Teknik Üniversitesi iş birliği ile hazırlanmış olmasıdır.Ayrıntılı bilgi ve indirme için burayı ziyaret edebilirsiniz.

Kolay gelsin.

 

WPF-Attached Property Nedir?

Temmuz 04
by Abdurrahman Köken 4. Temmuz 2010 21:18

Sıradan property’lerin yanı sıra XAML,pek çok kontrolün uygulayabildiği fakat farklı bir sınıfta tanımlanan attached property adında bir konsepti de içerisinde barındırmaktadır. WPF uygulamalarında attached property’ler daha çok kontrollerin düzeni(layout)  için kullanılmaktadır.

Nasıl Çalışır?

Her kontrolün kendine has belirli property kümesi vardır.Örneğin bir textbox’ın fontu,metin rengi ve text içeriği gibi özellikleri vardır.Bu özellikler FontFamily,Foreground ve Text gibi propertyler tarafından set edilebilmektedir.Bunun yanı sıra bir kontrolü bir konteynırın içine yerleştirdiğimizde, kontrol konteynırın tipine bağlı olarak ek özellikler kazanır.Örneğin bir textbox’ı bir Canvas’ın içerisini yerleştirdiğimizde sol üst noktaya göre pozisyonunu ayarlayabiliyor olmalıyız.Bu ekstra detaylar attached property ‘ler kullanılarak ayarlanabilmektedir.

Attached property’ler isimlendirilmesi daima  DefiningType.PropertyName şeklinde iki kısımdan oluşur.Bu ikili isimlendirme sözdizimi XAML Parser’ın  normal property’ler ile attached property’leri ayırt etmesini sağlar.

<Canvas> 

<TextBox Canvas.Top="10"/> 

<TextBox Canvas.Top="40"/> 

<TextBox Canvas.Top="70"/>

</Canvas> 

Attached property’ler aslında gerçek property değildirler.Onlar özünde method çağrımlarına çevrilmişlerdir.XAML parser DefiningType.SetPropertyName() formundaki static bir metodu çağırır.Örneğin yukarıdaki kodumuzda DefiningType Canvas,Property’miz  de Top olduğu için xaml parser Canvas.SetTop() metodunu çağırır.

SetPropertyName()’i çağırırken xaml parser iki parametre geçirir:düzenlenen nesne ve belirlenen property değeridir.Örneğin textbox kontrolünde Canvas.Left özelliğini set ettiğimizde parser şu kodu çalıştırır:

Canvas.SetLeft(txtBox1,10);

Burada soldan uzaklık aslında uygulanan nesne üzerinde saklanmaktadır.Bu durumda property değer TextBox üzerinde saklanmaktadır.Çünkü tüm WPF kontrolleri gibi TextBox kontrolü de DependencyObject temel sınıfından türemiştir.Bilindiği gibi DependencyObject, dependency property’lerin sınırsız bir koleksiyonunu saklamak için tasarlanmıştır.Attached property’ler de dependency property’lerin özel bir tipidir.Belirtmem gereken bir husus da şudur.Aslında Canvas.SetLeft() metodu DependencyObject.SetValue() metodunun bir kısayoludur.Örneğin:

txtBox1.SetValue(Canvas.LeftProperty,10);

Attached property’ler WPF’in çekirdek bileşenleridir.Çok amaçlı genişletilebilir bir sistem gibi davranırlar.Örneğin Left property’sini attached property olarak tanımlayarak,bu property’nin herhangi bir kontrol ile kullanılabilmesini sağlamakla beraber esnek bir yapı oluşturmuş oluruz.

Kolay gelsin.  

WPF-Binding Modlar

Temmuz 04
by Abdurrahman Köken 4. Temmuz 2010 01:37

Bu yazımda data binding işlemlerinde kullanılan binding modlar hakkında bilgi vermek istiyorum.Binding modları kullanarak kaynak ile hedef arasındaki veri akışını kontrol edebiliriz.Özellikle bazı durumlarda verilerimizin kaynaktan hedefe gibi tek yönlü akmasını isteriz.Aşağıdaki tabloda binding modların bir listesini ve hangi modun ne işe yaradığını bulabilirsiniz.

 

OneWay

OneWay mod tablodaki açıklamada da belirtildiği gibi tek yönlü bir veri akışı söz konusudur.Bu akış da kaynaktan hedefe doğrudur.Kaynak property de herhangi bir değişiklik olduğunda bu değişiklik hedef property eye de yansımaktadır.

TwoWay

En sık kullanılan modlardan birisidir.OneWay moda ek olarak  hedeften kaynağa veri akışı da sağlamaktadır.

OneTime

OneTime mod ise aslında bazı yerlerde çok kullanışlı olabilmektedir.Bu mod ile kaynaktan hedefe doğru sadece bir kez binding işlemi söz konusudur.

OneWayToSource

İsminden de anlaşılacağı gibi OneWay modun tam tersi işlemi yerine getirmektedir.Hedef property de  olan bir değişiklik kaynağa yansıtılmaktadır.

<TextBox x:Name="txtSource"/>

<TextBox Text="{Binding ElementName=txtName,Path=Text,Mode=OneWay}"/> 

Yukarıdaki kodda binding modların kullanılışını gösteren bir örnek bulunmaktadır.Buradaki kodda dikkat ederseniz OneWay  mod kullanılmış.Yani üstteki TextBox’a girilen metnin aynısı binding işlemleri sayesinde alttaki TextBox’ta da görülecektir.Fakat alttaki kutucukta yapılan değişiklik kaynak TextBox’ın Text property’sinde herhangi bir değişikliğe sebep olmayacaktır. Aşağıdaki şekilde kolay bir şekilde modlar arasındaki farkları görebilirsiniz.

   

Kod Tarafında Binding İşlemi 

Binding binding = new Binding();

binding.Source = txtSource;

binding.Path = new PropertyPath("Text");

binding.Mode = BindingMode.OneWay;

txtTarget.SetBinding(TextBlock.TextProperty, binding);

Yukarıda bahsettiğim modlar arasındaki farkı daha iyi anlamanız için yukarıdaki örnek kodun modlarını değiştirmenizi tavsiye ederim.

Hepinize kolay gelsin.

 

WPF-Dependency Property Nedir?

Mayıs 06
by Abdurrahman Köken 6. Mayıs 2010 02:34

Giriş

WPF ile uğraştıysanız farkında olmadan da olsa mutlaka Dependency propertyleri kullanmışsınızdır.Dependency propertyler  normal .NET propertylerine oldukça benzemektedir, fakat Dependency propertyler konsept olarak çok daha güçlü ve komplekstir.Aralarındaki en önemli fark,normal bir  .NET propertynin değeri sınıfta tanımlanmış private bir üyeden direkt olarak okunur.

Bir dependency propertynin değeri ise GetValue() metodu çağrıldığında dinamik olarak çözümlenir.Bir dependency propertynin değerini set ettiğimizde bu nesnemizin bir alanında saklanmaz onun yerine DependencyObject temel sınıfı tarafından sağlanan bir dictionary de saklanmaktadır.Bildiğiniz gibi dictionary ler key ve value dan oluşmaktadır.Giriş key dediğimiz property ismi,value ise set etmek istediğimiz değeri tanımlamaktadır.

Dependency propertylerin avantajlarından en önemlileri bellek dağıtık kullanımını azaltma,değer kalıtımı ve property değişim bildirimi olarak sıralayabiliriz.Burada değer kalıtımı dediğimiz bir dependency propertye eriştiğimizde değeri, değer çözümleme stratejisi kullanılarak çözümlenir.Eğer lokal bir değer ayarlanmamışsa,dependency property bir değer buluncaya kadar mantıksal ağaçta bir üste yönlenir.Örneğin root elementte FontWeight’i ayarlarsak root element altındaki tüm TextBlock lara bu stili override etmediğimiz sürece uygulanacaktır.

Değer Çözümleme Stratejisi

Dependency property lere her erişimimizde değeri çözümlemek için yukardan aşağıya doğru öncelik sırasını takip eder.

1.Animation

2.Binding Expression

3.Local Value

4.Custom Style Trigger

5.Custom Template Trigger

6.Custom Style Setter

7.Default Style Trigger

8.Default Style Setter

9.Inherited Value

10.Default Value 

Her WPF kontrolü static DependencyProperty sınıfına bazı dependency property leri kayıt eder.Bu propertylerin her biri tekil bir key ‘e (anahtar) ve geridönüş ve varsayılan değer içeren metadata ya sahiptir.Dependency property kullanmak isteyen tüm tipler Dependency Object sınıfından kalıtılmış olmak zorundadır.Bir dependency property’e onun .NET property wrapper üzerinden eriştiğimizde , değere erişmek için GetValue() metodunu çağırır.Bu metod değer çözümleme stratejisini kullanarak uygun değeri döndürür.

Dependency Property Tanımlama

// Dependency Property        

 public static readonly DependencyProperty HasTextProperty =  DependencyProperty.Register("HasText", typeof(bool), typeof(MainWindow), new FrameworkPropertyMetadata(false));  

//.NET Property wrapper       

 public bool HasText       

{          

      get { return (bool)GetValue(HasTextProperty); }    

      set { SetValue(HasTextProperty, value); }      

} 

Yukarıda tanımlanan dependency property ilk bakışta biraz karışık gelse de aslında çok kullanışlı ve güçlü bir yapısı vardır.Bir dependency property tanımlamak için isterseniz kısayol olarak code snippet kullanabilirsiniz.Kod tarafında propdp yazıp klavyeden  iki kere Tab tuşuna bastığınızda otomatik olarak bir dependency property tanımlanır.Buradan önemli bir nokta isimlendirmeye dikkat ettiyseniz sonu Property ile bitmektedir.Bu tanımlama için gerekli bir koşuldur.İsimlendirmenin sonuna Property kelimesi konulması gerekmektedir HasTextProperty gibi.

Her dependency property değişikliği bildirme,değeri zorlama ve doğrulama  için bir callback sağlar.

new FrameworkPropertyMetadata(false, OnHasTextPropertyChanged, OnCoerceHasTextProperty,OnValidateHasTextProperty); 

Change Notification Callback Metodu

HasTextProperty’ sinin değeri her değiştiğinde çağrılır.Yeni değer EventArgs üzerinden geçirilir.

private static void OnHasTextPropertyChanged(DependencyObject source,DependencyPropertyChangedEventArgs e) {       

     MainWindow control = source as MainWindow;         

     bool val= (bool)e.NewValue;                   

 }

Coerce Value Callback Metodu

Coerce value callback,exception fırlatmadan değerin belirlenen sınırlar içerisinde olmasını ayarlamamızı sağlar.Mesela bir progress  bar’ı ele alırsak değerinin minimum 0 ve maximum 100 arasında olması için zorlayabiliriz.Böylece exception fırlatmasını da engellemiş oluruz.Aşağıdaki örnek kodda eğer değerimiz 0 ile 100 arasında değilse değerimizi  0 olarak atıyoruz.

private static object OnCoerceHasTextProperty(DependencyObject sender, object data)      

 {       

     if (!((int)data >= 0 && (int)data<=100))            

     {          

          data = 0;  

     }        

     return data;       

}

Validation Callback Metodu

Bu metodumuzda ise set edilen değerin bizim dependency property nesnemizin tipinde olup olmadığını doğrulamamızı sağlar.Eğer false dönerse ArgumentException fırlatılır.

private static bool OnValidateHasTextProperty(object data) 

{    

    return data is bool; 

}

Gördüğünüz gibi dependency property ‘leri kısaca bu şekilde tanımlayabiliriz.Normal .NET property’ler ile arasındaki farka gözattık ve bir dependency property tanımlama konusuna giriş yapmış olduk.Umarım yararlı bir yazı olmuştur.

Kolay gelsin.

Imagine Cup'10 Türkiye Finali Tamamlandı

Mayıs 03
by Abdurrahman Köken 3. Mayıs 2010 18:39
Herkese merhabalar,

Son birkaç gündür Imagine Cup 2010 Türkiye Finali ve  seminerler için İstanbul’daydım.Geçtiğimiz Cuma günü Microsoft Türkiye Ofisi’nde Imagine Cup’10 Türkiye Finali yapıldı.Gerçekten birbirinden başarılı beş proje sunumu izledik.Türkiye finaline katılamayanlar ise canlı olarak internet üzerinden izleme şansı buldular. Tüm ekipler projelerini sunduktan sonra sıra ilk üçü açıklamaya gelmişti.Ekiplerin o an ki heyecanını görmeliydiniz.En arkaya oturduğum için de tüm ekiplerin heyecandan yerlerinde duramadıklarını çok daha iyi gördüm.

Özellikle IC’10 Türkiye 1.si açıklanınca kazanan ekipten birisi çığlık attı.Türkiye’yi Polonyo’da temsil edecek ekip BabyRC Team oldu.Buradan Burak Kanmaz,Fatih Coşkun,İbrahim Kıvanç ve Yasemin Çelik arkadaşlarıma Polonya’da başarılar diliyorum.

                    Imagine Cup'10 Türkiye 1.si ekip

Ertesi gün Microsoft Ofisi’nde MaxiASP.net  4.0  INETA etkinliği vardı.Etkinlikte C# 4.0,ASP.NET 4.0,WPF 4.0,Silverlight 4.0 ve TFS 2010 sunumları gerçekleştirildi.Yine aynı şekilde bu etkinlik de canlı olarak internet üzerinden yayınlandı.Katılım haftasonu ve özellikle 1 Mayıs olmasına rağmen oldukça iyiydi.Etkinliğe katılanlar arasından şanslı üç kişi USB bellek, şanslı yirmi kişi ise VDS  hediye edildi hem de .NET 4.0 destekli:)

  

WPF-Veri Filtreleme ve Sıralama

Mayıs 03
by Abdurrahman Köken 3. Mayıs 2010 18:28

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)

LINQ ve Extension Metod Aşkı

Nisan 18
by Abdurrahman Köken 18. Nisan 2010 01:40

Geçenlerde bitirme projemle uğraşırken LINQ teknolojisini ve Extension Metodlarını oldukça sık kullandığımı farkettim. Geriye dönüp baktığımda yazdığım kodları linq kullanmadan yazmaya kalkınca gerçekten de ne kadar vakit kazandığımın bir daha farkına vardım.Projemden örnek vermek gerekirse aşağıdaki gibi bir soru sınıfım var.Her soru bu QuizQuestion sınıfı ile temsil ediliyor.Soruların bulunduğu bir listeden hangi soruların sorulup hangilerinin sorulmadığını bulup sorulmayanları seçmek için iki yöntemi aşağıda bulabilirsiniz.

 

Normal hali:

List<QuizQuestion> sorular = GetQuestions();

List<QuizQuestion> sorulmayanlar = new List<QuizQuestion>();

foreach (QuizQuestion soru in sorular)  

{         

if (soru.Asked==false)

       {

             sorulmayanlar.Add(soru); 

        }  

} 

Linq ile yazılmış hali:

List<QuizQuestion> sorular = new List<QuizQuestion>();

List<QuizQuestion> sorulmayanlar = sorular.Where(q => q.Asked == false).ToList(); 

Gördüğünüz gibi fark ortada.Tabi burada basit düşünmemek lazım çok daha  büyük ve karmaşık projelerde asıl faydası ortaya çıkacaktır.

İyi ki varsın LINQ!

 

Silverlight 4 Yayınlandı

Nisan 17
by Abdurrahman Köken 17. Nisan 2010 00:34

Herkese merhabalar,

Bir release dir aldı başını gidiyor.Microsoft tarafında Nisan ayında son sürümü yayınlanan bir diğer ürün ise Silverlight 4 oldu arkadaşlar.Artık Visual Studio 2010’unuza gerekli tool’u indirip kurduktan sonra Silverlight 4 ile projeler geliştirmeye başlayabilirsiniz.Gerekli yüklemeleri www.silverlight.net/getstarted  adresinden yapabilirsiniz.

Visual Studio 2010 ve .NET 4 Yayınlandı

Nisan 14
by Abdurrahman Köken 14. Nisan 2010 22:17

 

İşte beklenen an geldi ve Visual Studio 2010 RTM oldu.Bildiğiniz gibi VS2010’nun son sürümünün çıkış tarihi  12 Nisan 2010 olarak belirtilmişti.Artık VS2010 ve .NET 4’ün son sürümlerini edinebilirsiniz.Silverlight 4’ün de bu hafta içinde RTM olması bekleniyor.Yayınlanır yayınlanmaz VS2010’a entegre etmek için gerekli eklentiler çıkacaktır.VS2010 MSDN üyeleri için download a açılmış bulunmaktadır.

MSDN üyesi olmayanlar Visual Studio Express sürümlerini ücretsiz olarak edinebilirler.Eğer isterseniz Visual Studio 2010 Ultimate’in  90 günlük deneme sürümünü de edinebilirsiniz.En güzel haber ise Visual Studio 2010 Professional sürümü DreamsPark ve MSDN Academic Alliance üyelerine de açılmış bulunmaktadır.

Hepinize hızlı indirmeler!

Visual Studio 2010 Ultimate 90 gün ücretsiz deneme sürümü indir

Visual Studio 2010 Express sürümlerini indir

Bilişim Tatili 2010

Nisan 11
by Abdurrahman Köken 11. Nisan 2010 23:24
Bilişim Öğrencileri ve Öğretim Görevlileri İle Sektörü Buluşturmayı amaçlayan “Bilişim Tatili 2010”da; söyleşi, konferans, sergi Alanı Oluşturulacak ve 3 Gün Boyunca Sosyal ve Kültürel Aktiviteler Gerçekleştirilecektir.
Yaklaşık 1000 Kişinin Katılımı Hedeflenen Etkinlikte, Bilişim Alanlarında Öğrenci & Öğretim Görevlisi Olan ve Bilişime İlgi Duyan Gençlerin Sektörün Temsilci ve Yöneticileri İle Tanışmak, Kariyer veya Staj Fırsatı Yakalamak, Sektördeki Gelişmeleri ve Yeni Nesil Teknolojileri Detaylı Olarak Anlayabilmeleri İçin Lansmanlar ve Söyleşiler Düzenlenecektir.

Konuşmacılarımız Kimler?
Aret Vartanyan (Doğan Online)
Daron Yöndem (Microsoft Gold Regional Director)
Barış Özcan (Adobe)
Devletşah Özcan (http://www.devletsah.com/)
Okan Yıldırım (6q Games)
Ebru Baranseli (Eskişehir Anadolu Üniversitesi)
Ömer Ekinci (Desnet – Vodera)
7 den 70 e bilişime ilgi duyan herkes bu etkinliğin genel kapsamı içerisindedir. Etkinlikten maksimum faydayı sağlayacak kesimleri ele alacak olursak;
Üniversitelerin Bilişim, Grafik, Matematik ve Mühendislik ile İlgili Bölümlerinde Okuyan Öğrenciler
Bilişim Sektörüne İlgi Duyan Öğrenciler
Fakültelerin Bilişim Kulüpleri
İlgili Öğretim Üyeleri
İlgili Kamu Kuruluşları
Sektör Temsilcileri
Sektörel Yayınların Temsilcileri
İlgili Sivil Toplum Kuruluşları
İlgili Web Siteleri ve Sosyal Paylaşım Siteleri
Etkinlik Ne Zaman ,Nerede?
Etkinlik tarihi: 07- 09 Mayıs 2010 arasında  Çeşme Altınyunus Otelinde.
Peki ya eğlence?
Etkinliğimiz sadece konferans-seminerden oluşmayacak elbette, konseptimiz tatil, gün içerisindeki çeşitli kumsal etkinlikleri , harika bir plaj sizleri beklemekte. Ayrıca her gece yapılacak kumsalda tadına doyulmaz eğlence sunacak partilerimizi de unutmayalım:)
Etkinliğin Bedeli Ne Kadar?
Etkinliğe katılım ücreti 3 kişilik odada kişi başı 225 TL;
2 kişilik odada kişi başı : 275 TL ‘dir
Günübirlik katılım ücreti kişi başı: 150 TL‘ dir
Kredi kartı ile peşin fiyatına 3 taksitle ödeme yapılabilir.
Ücrete dahil olan hizmetler:
- Açık büfe sabah kahvaltısı
- Açık büfe öğle yemeği
- Açık büfe akşam yemeği
- Havuzbaşı partileri
- Açık / Kapalı yüzme havuzu
- Sauna
- Workshoplar
- Eğitim ve toplantılar
- Sürpriz eğlenceler:)
Abdurrahman Köken-Recent Post