Silverlight tarafında çalışma zamanında(runtime) yapılmasına gerek duyulan implementasyonlar yüzünden MVVM gibi yazılım tasarımlar gün yüzüne çıkmıştır. Bu tarz kod yazım tasarımları, ürünlere bağlı değildir aslında. Ancak ürün sahipleri, yeni sürümlerini çıkarırken, geliştiricilere yardımcı olabilmek ve güncelliği korumak adına bir dizi eklemeler yapabilmektedirler. Silverlight tarafında Silverlight 4 ile birlikte gelen Commanding yapısı da bize kolaylık sağlayacak özelliklerden biridir.
Commading yapısının bize sağlayacağı kolaylıkların başında, event ve eventhandler mekanizmalarıyla uğraşmadan kod akışını düzenlemek geliyor. Yani normal kodlama yaparken alışkanlıklarımızdan biri şudur: arayüz(xaml) tarafındaki bir bileşende gerçekleşecek olan bir olay aynı xaml dosyasına bağlı *.cs kod dosyasında yaparız. Commanding yapısında ise gerçekleşen olayı ayrı bir sınıf aracılığıyla yaparız. Diğer bir husus ise modüler programlama yaparken sağlayacağı kolaylıktır ki bizi en çok rahatlatacak olan özelliklerinden biri de budur. Bir modül oluşturduğunuzu düşünün(ayrı bir silverlight dll). Bu modül üzerinde görsellikle diğer katmanlar rahatlıkla ayrılabilir.
En basit şekliyle event yakalama işlemini gösteren bir uygulamayla işe başlayalım.
Örnek Uygulama
Bu örneğimizde bir butona tıkladığımızda verilen mesajı hem cs kodundaki event ile hem de command mekanizmasıyla gerçekleştireceğiz.
private void button1_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Mainpage.cs tarafındaki event"); }
Yukarıdaki kod ile alışılagelmiş ve en basit haliyle butona tıklayıp sonuç alma işlemini gerçekleştirmiş olduk. Bu işlemi bir de comman binding yardımıyla ile yapalım.
public class MessageCommand:ICommand { public bool CanExecute(object parameter) { return true; } public void Execute(object parameter) { MessageBox.Show("MessageCommand tarafından gelen event."); } public event EventHandler CanExecuteChanged; }
Öncelikle ICommand arayüzünü uygulayan MessageCommand bir sınıf oluşturduk. Bu sınıf, ICommand ile gelen CanExecute, Execute, CanexecuteChanged üyelerini de barındırıyor.
Belirtmekte fayda var. ICommand arayüzünün profili de şu şeklidedir.
public interface ICommand { event EventHandler CanExecuteChanged; bool CanExecute(object parameter); void Execute(object parameter); }
Şimdi xaml tarafında MessageCommand tipine butonu bağlayabiliriz.
Bu uygulama, command binding işleminin nasıl yapıldığını en düşük seviyede anlatan bir uygulamadır. İleri seviyedeki uygulamalar ise MVVM(Model View and ViewModel) tasarım deseni uygulandığı örneklerde gösterilmektedir. önümüzdeki yazılarda bu konuya değinmeye çalışacağız.
Tekrar görüşmek ümidiyle.