Örnek 1: MVVM uygulamamda görüntülenen bir görüşüm var (tartışma için Silverlight'ı kullanalım) ve beni yeni bir sayfaya götürmesi gereken bir düğmeyi tıklıyorum.
Örnek 2: Aynı görünümde, tıklandığında alt pencerede bir ayrıntı görünümü açması gereken başka bir düğme bulunur (iletişim kutusu).
ViewModel'imizin maruz bıraktığı komut nesnelerinin, kullanıcının tıklamasına yanıt veren yöntemlerle düğmelere bağlı olacağını biliyoruz. Ama, o zaman ne? İşlemi nasıl tamamlarız? NavigationService denilen bir şey kullansak bile, ne söylüyoruz?
Daha açık olmak gerekirse, geleneksel bir View-first modelinde (web'de veya SL'de yerleşik gezinme çerçevesinde olduğu gibi URL tabanlı gezinme şemaları gibi), Command nesnelerinin daha sonra hangi görünümün görüntüleneceğini bilmesi gerekir. Bu, model tarafından desteklenen endişelerin ayrılması söz konusu olduğunda çizgiyi geçiyor gibi görünüyor.
Öte yandan, düğme bir Command nesnesine bağlı değilse ve köprü gibi davrandıysa, gezinme kuralları işaretlemede tanımlanabilir. Ancak, Görünümlerin uygulama akışını kontrol etmesini istiyoruz ve navigasyon sadece başka bir iş mantığı türü değil mi? (Bazı durumlarda evet, bazılarında hayır diyebilirim.)
Bana göre, MVVM modelinin ütopik uygulaması (ve başkalarının bunu söylediğini duydum), ViewModel'in, uygulamanın başsız çalışabileceği şekilde (örn. Görüntüleme Yok) çalışmasını sağlayacak şekilde kablolanmış olması olacaktır. Bu, kod tabanlı test için en fazla yüzey alanını sağlar ve Görünümleri uygulamada gerçek bir görünüm oluşturur. Ve ViewModel'im ana pencerede, hareketli bir panelde veya bir alt pencerede görüntülenip görüntülenmemesine aldırış etmemeli, değil mi?
Bu değerlendirmeye göre, çalışma zamanında her ViewModel için hangi View'in gösterilmesi gerektiğini 'bağlamak' mümkün. Ancak, bir Görünümü birden fazla ViewModels ile veya tam tersi olarak paylaşmak istiyorsak ne olur?
Böylece View-ViewModel ilişkisini yönetme ihtiyacı duyulduğundan, pencereler / diyaloglar gösterme dahil görünümler arasında gezinme ihtiyacı ile birlikte ne göstereceğimizi biliyoruz, bunu MVVM modelinde nasıl başarıyoruz?