2010-05-21 10 views
7

Dường như XAML trong mẫu MVVM gặp khó khăn khi bật lên một Hộp thư. Khách hàng của tôi khẳng định rằng nhãn và màu xác thực không tốt cho chúng. Họ vẫn muốn một hộp thư. Làm thế nào có thể làm điều đó?Cách sử dụng Hộp thư trong MVVM?

Tôi biết tôi có thể bật lên các hộp thư trong chế độ xem, nhưng nó vi phạm toàn bộ mục đích cho mô hình chế độ xem. Tôi cũng có thể gây ra lỗi, và bật lên một hộp thư trong một số trình xử lý ngoại lệ, nhưng hộp thư không phải là một ngoại lệ. Nó là một phần của dòng chương trình bình thường.

Có cách nào tốt để thực hiện điều đó trong XAML không? Khách hàng của tôi thích hộp thư. Cô ấy không quan tâm đến mẫu MVVM, cô ấy chưa bao giờ gặp bất kỳ vấn đề chất lượng nào trước khi sử dụng MVVM và kiểm thử đơn vị. Nhưng bây giờ, cô ấy thậm chí không thể nhận được hộp thư của mình, vì vậy cô ấy không phải là rất hạnh phúc.

Trả lời

1

Bạn có thể có một sự kiện PopUpNotificationRequested trong ViewModel của bạn sẽ được xử lý bởi các Xem để hiển thị hộp thư. Bằng cách này, logic để hiển thị hộp thông báo nằm trong viewmodel, nhưng vẫn được tách ra khỏi khung nhìn.

+0

Cảm ơn bạn rất nhiều. Nhưng tôi đã làm một tìm kiếm google cho "PopUpNotificationRequested" và tôi không thể có được bất cứ điều gì. Một điều nữa: Nếu tôi sử dụng "PopUpNotificationRequested", tôi vẫn chạm vào giao diện người dùng trực tiếp, điều này có vi phạm mẫu MVVM không? – BigTiger

2

Một possibilty là sử dụng một giao diện cho các bảng thông báo như

public interface IMessageBoxProvider 
{ 
    MessageBoxResult Show(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult); 

} 

và một lớp wrapper mà thực hiện giao diện này và sử dụng một bảng thông báo bình thường hoặc tùy chỉnh. Trong chế độ xem, bạn có thể sử dụng như thế này

private IMessageBoxProvider MessageBox { get; set; } 

nơi MessageBox là lớp trình bao bọc. Vì vậy, bây giờ bạn đã tách riêng hộp thư thực tế và vì vậy bạn có thể kiểm tra đơn vị và những gì không.

0

Tôi đã gặp sự cố này vài tuần trước. Tôi đã xem qua bài viết này (http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/) và về cơ bản theo một quá trình rất giống nhau để hiển thị các hộp thoại phương thức với mẫu MVVM. Để kiểm tra ViewModels của tôi chỉ đơn giản là chỉ cần tạo một dịch vụ hộp thoại mô hình giả. Tôi hy vọng điều này sẽ giúp bạn quá.

2

Josh Smith cũng có một bài viết CodeProject mà bạn có thể quan tâm here.