Contoh # 1: Saya memiliki tampilan yang ditampilkan dalam aplikasi MVVM saya (mari kita gunakan Silverlight untuk keperluan diskusi) dan saya mengklik tombol yang akan membawa saya ke halaman baru.
Contoh # 2: Tampilan yang sama memiliki tombol lain yang, ketika diklik, harus membuka tampilan detail di jendela anak (dialog).
Kita tahu bahwa akan ada objek Command yang diekspos oleh ViewModel kita yang terikat pada tombol dengan metode yang merespons klik pengguna. Tapi, bagaimana? Bagaimana kita menyelesaikan aksinya? Bahkan jika kita menggunakan layanan Navigasi, apa yang akan kita katakan?
Untuk lebih spesifik, dalam model Tampilan-pertama tradisional (seperti skema navigasi berbasis URL seperti di web atau kerangka kerja navigasi bawaan SL) objek Perintah harus tahu Tampilan apa yang akan ditampilkan selanjutnya. Itu tampaknya melewati batas ketika sampai pada pemisahan kekhawatiran yang dipromosikan oleh pola.
Di sisi lain, jika tombol tidak ditransfer ke objek Command dan berperilaku seperti hyperlink, aturan navigasi dapat didefinisikan dalam markup. Tetapi apakah kita ingin agar Views mengendalikan aliran aplikasi dan bukankah navigasi hanyalah tipe lain dari logika bisnis? (Saya bisa mengatakan ya dalam beberapa kasus dan tidak dalam kasus lain.)
Bagi saya, implementasi utopis dari pola MVVM (dan saya pernah mendengar orang lain mengaku) akan memiliki kabel ViewModel sedemikian rupa sehingga aplikasi dapat berjalan tanpa kepala (yaitu tidak ada Views). Ini memberikan area permukaan paling luas untuk pengujian berbasis kode dan membuat Tampilan menjadi kulit asli pada aplikasi. Dan ViewModel saya seharusnya tidak peduli jika itu ditampilkan di jendela utama, panel mengambang atau jendela anak, bukan?
Menurut apprach ini, tergantung pada beberapa mekanisme lain saat runtime untuk 'mengikat' tampilan apa yang harus ditampilkan untuk setiap ViewModel. Tetapi bagaimana jika kita ingin berbagi Tampilan dengan banyak ViewModels atau sebaliknya?
Jadi mengingat kebutuhan untuk mengelola hubungan View-ViewModel sehingga kita tahu apa yang harus ditampilkan ketika bersama dengan kebutuhan untuk menavigasi antara tampilan, termasuk menampilkan jendela anak / dialog, bagaimana kita benar-benar mencapai ini dalam pola MVVM?