Tôi đang thực hiện MVP/M-V-VM trong WPF và tôi đang có may mắn với nó cho đến nay. Tuy nhiên, tôi không thấy cách mô hình này hỗ trợ triển khai các hộp thoại Modal. Tôi đã bắt đầu công việc của tôi từ Crack.NET (http://www.codeplex.com/cracknetproject) để tìm hiểu cách thức hoạt động của công cụ này.Hộp thoại Model-View-Presenter và Modal Dialog .... Làm thế nào để?
Tôi có chế độ xem ShellView (chỉ là XAML) có trình đơn trên đó. Trình đơn liên kết với một lệnh trong ShellModelView có nội dung "EditPreferences".
ShellModelView triển khai ICommand cho EditPreferences và tại đây chúng tôi muốn đưa ra một hộp thoại để cho phép người dùng chỉnh sửa tùy chọn cho ứng dụng.
Một số vấn đề ở đây: 1. ShellModelView không có tham chiếu đến ShellView để cha mẹ chính xác hộp thoại. ShellModelView là DataContext của ShellView nhưng tôi không thấy một backreference được thiết lập. 2. ShellModelView không nên tải giao diện người dùng rõ ràng. Vậy mô hình tương tác thích hợp ở đây là gì? 3. Làm thế nào để xây dựng PreferencesDialog của tôi để nó được tách biệt đúng cách giữa logic và khung nhìn? PreferencesDialog chính nó cần phải là một cửa sổ, do đó bạn có thể gọi ShowDialog trên nó, nhưng điều đó có nghĩa là bạn cần một tham chiếu đến Window (ví dụ như View) để khởi tạo nó. Lý tưởng nhất là tôi có thể kiểm tra đơn vị mã/xác nhận hợp lệ trong PreferencesDialog mà không tạo ra khung nhìn (sử dụng khung nhìn Mock có lẽ?).
Tôi nghĩ một trong những mục tiêu của MVVM là đạt được không có ViewModel biết điều gì về Chế độ xem (hoặc hộp thoại trong ví dụ của bạn)? Vì vậy, bất kỳ số lần xem nào (hoặc không có) có thể đang sử dụng một ViewModel bất kỳ lúc nào. Có ViewModel của bạn thiết lập mọi thứ trên một giao diện dạng xem sẽ phá vỡ điều đó. –
Nó không phải vì giao diện cách ly lệnh từ việc thực hiện hộp thoại. –
Đó là mẫu MVP. Thay đổi giao diện Chế độ xem được đề xuất của bạn sẽ phá vỡ ViewModel, ví dụ: thay đổi chữ ký của một phương thức hoặc kiểu thuộc tính, BAM bạn vừa phá vỡ ViewModel của bạn có một sự phụ thuộc trên giao diện. Trong MVVM, khung nhìn 'quan sát' ViewModel qua Bindings. Thay đổi Chế độ xem (ví dụ: thêm điều khiển) sẽ không yêu cầu thay đổi giao diện hoặc thậm chí biên dịch lại ViewModel. Điều thú vị là, một ViewModel có thể được 'quan sát' bởi nhiều Chế độ xem. Xem mẫu Observer trong cuốn sách GOF và đọc phần Tài liệu lăng kính 'Mô hình trình bày' nếu bạn quan tâm nhiều hơn về điều này :) –