Ví dụ # 1: Tôi có chế độ xem được hiển thị trong ứng dụng MVVM của mình (hãy sử dụng Silverlight cho mục đích thảo luận) và tôi nhấp vào nút sẽ đưa tôi đến một trang mới.
Ví dụ # 2: Cùng một chế độ xem có một nút khác, khi được nhấp, sẽ mở ra một chế độ xem chi tiết trong cửa sổ con (hộp thoại).
Chúng tôi biết rằng sẽ có các đối tượng Lệnh được hiển thị bởi ViewModel của chúng tôi được liên kết với các nút bằng các phương thức đáp ứng với nhấp chuột của người dùng. Nhưng, sau đó thì sao? Làm thế nào để chúng ta hoàn thành hành động? Ngay cả khi chúng ta sử dụng cái gọi là NavigationService, chúng ta sẽ nói gì với nó?
Cụ thể hơn, trong một mô hình Chế độ xem đầu tiên truyền thống (như các lược đồ điều hướng dựa trên URL như trên web hoặc khung điều hướng tích hợp SL), các đối tượng Lệnh sẽ phải biết Chế độ xem nào sẽ hiển thị tiếp theo. Điều đó dường như vượt qua ranh giới khi nói đến sự tách biệt các mối quan tâm được thúc đẩy bởi mô hình.
Mặt khác, nếu nút không được nối với đối tượng Command và hoạt động như một siêu liên kết, các quy tắc điều hướng có thể được xác định trong đánh dấu. Nhưng chúng tôi có muốn Chế độ xem kiểm soát luồng ứng dụng và không điều hướng chỉ là một loại logic kinh doanh khác? (Tôi có thể nói có trong một số trường hợp và không trong những trường hợp khác.)
Đối với tôi, việc triển khai mô hình MVVM không tưởng (và tôi đã nghe người khác tuyên bố điều này) sẽ có ViewModel có dây theo cách mà ứng dụng có thể chạy không đầu (tức là không có Chế độ xem). Điều này cung cấp diện tích bề mặt nhất để kiểm tra dựa trên mã và làm cho Chế độ xem thực sự trên ứng dụng. Và ViewModel của tôi không nên quan tâm nếu nó hiển thị trong cửa sổ chính, bảng điều khiển nổi hoặc cửa sổ con, phải không?
Theo apprach này, tùy thuộc vào một số cơ chế khác trong thời gian chạy để 'liên kết' những gì View sẽ được hiển thị cho mỗi ViewModel. Nhưng nếu chúng ta muốn chia sẻ View với nhiều ViewModels hoặc ngược lại thì sao?
Vì vậy, cần phải quản lý mối quan hệ View-ViewModel để chúng tôi biết phải hiển thị gì khi cùng với nhu cầu điều hướng giữa các khung nhìn, bao gồm hiển thị các cửa sổ / hộp thoại con, làm thế nào để chúng tôi thực sự thực hiện điều này trong mẫu MVVM?