Приклад №1: У моєму додатку MVVM відображається подання (давайте використовувати Silverlight для обговорення) і натискаю кнопку, яка повинна перенести мене на нову сторінку.
Приклад №2: У цьому ж представленні є ще одна кнопка, яка при натисканні повинна відкрити перегляд деталей у дочірньому вікні (діалоговому вікні).
Ми знаємо, що знайдуться об’єкти Command, відкриті нашим ViewModel, прив’язаними до кнопок методами, які реагують на натискання користувача. Але, що ж тоді? Як ми закінчимо дію? Навіть якщо ми використовуємо так звану Навігаційну службу, що це ми говоримо?
Якщо бути більш конкретним, в традиційній моделі перегляду для першого перегляду (наприклад, навігаційних схемах на основі URL, таких як в Інтернеті або вбудованій в SL навігаційну рамку) об'єкти Command повинні знати, який вид відображати далі. Здається, це переходить лінію, коли мова йде про відокремлення проблем, що сприяють цій схемі.
З іншого боку, якщо кнопка не була підключена до об'єкта Command і вела себе як гіперпосилання, правила навігації можна було б визначити у розмітці. Але чи хочемо ми, щоб Views контролював потік додатків, а чи не навігація - це лише інший тип бізнес-логіки? (Я можу сказати, що так у деяких випадках, а в інших - ні.)
На мій погляд, утопічна реалізація шаблону MVVM (і я чув, як інші це сповідують) полягала б у тому, щоб ViewModel був провідним таким чином, що додаток може працювати без голови (тобто немає переглядів). Це забезпечує найбільшу площу поверхні для тестування на основі коду і робить Погляди справжньою поверхнею програми. І моєму ViewModel не повинно бути байдуже, чи відображається воно в головному вікні, плаваючій панелі чи дочірньому вікні, чи не так?
Згідно з цією програмою, за деяким іншим механізмом під час виконання потрібно "прив'язувати" те, що перегляд повинен відображатися для кожного ViewModel. Але що робити, якщо ми хочемо поділитись Переглядом з кількома ViewModels або навпаки?
Отже, враховуючи необхідність керувати відносинами View-ViewModel, щоб ми знали, що потрібно відображати, коли поряд з необхідністю переходити між переглядами, включаючи відображення дочірніх вікон / діалогів, як ми справді досягаємо цього в шаблоні MVVM?