Daha önceki yazılarımızda MVVM desenini basit bir şekilde nasıl implemente edebileceğimizden bahsetmiştik. Zamanla daha kompleks uygulamalar geliştirildiğinde önceki anlattıklarımızın tek başına yeterli olmadığını farketmişsinizdir. Örneğin o an uygulamanızın farklı kısımlarına, nesnelerinizi parametre olarak gönderip ona göre işlem yaptırmanız gerekiyor olabilir. İşte tam bu noktada Event Aggregator devreye giriyor.

Event aggregator uygulamamızın farklı bileşenlerinin loosely coupled bir şekilde birbiriyle haberleşmesini sağlayan bir servis olarak düşünülebilir. Bu sayede modüller arasındaki bağımlılık da minimuma indirilmiş olur. Event aggregator’ın nasıl çalıştığı ve ne zaman kullanılması gerektiği gibi best practice’ler için üstat Martin Fowler'ın şu yazısını okumanızı şiddetle tavsiye ederim.

Bu kadar teorik bilgiden sonra aynı şekilde Event Aggregator yapısını kullanan MVVM Light Toolkit ile ViewModel'ler arasında iletişimin nasıl sağlandığına bakalım.

MVVM Messenger

Uygulama seviyesinde singleton bir Messenger servisimiz bulunmaktadır. Bu servisimiz MVVM Light Toolkit’in bize sağlamış olduğu özelliklerden sadece bir tanesidir. Farklı ViewModel’lere mesaj gönderip alabilmek için Messenger sınıfının Send ve Register metodlarından yararlanacağız.

Öncelikle MVVM Light Toolkit'i ister NuGet'ten isterseniz de CodePlex'ten indirip projemize referans olarak eklememiz gerekiyor. Referansları ekledikten sonra ilgili sınıf ve metodlarına ulaşabilmek için namespace (GalaSoft.MvvmLight.Messaging) tanımlamalarını da yapıyoruz ve voila!

Gönderilen mesajı başka bir ViewModel’da alabilmek için yapıcı metodumuzda :
Messenger.Default.Register<string>(this, (p) =>  
{  
    MessageBox.Show(p);
});
ViewModel’dan mesaj göndermek için :
Messenger.Default.Send<string>("hello from another viewmodel!");  

About the Author