Tôi đã có điều tương tự xảy ra với tôi khi nâng cấp từ một phiên bản cũ của MVVM Light (thay đổi bộ 3bdbffb4e70a “BL0014 Misc”). Gửi ngay lập tức() ngừng hoạt động.
Để giải quyết vấn đề, hãy thử sử dụng bằng cách sử dụng quá tải .Register() với receiveDerivedMessagesToo được đặt thành true.
Sự cố này có thể xảy ra khi gửi() các đối tượng có một số loại DynamicProxy được tạo cho chúng. Ví dụ EntityFramework sẽ thực hiện điều này khi bạn sử dụng thuộc tính Local dưới bất kỳ bộ sưu tập nào trong ngữ cảnh dữ liệu của bạn.
ví dụ: EntityFramework DBContext cho ctx.Dealers.Local sẽ tạo ra một danh sách các mục của loại hình đó trông giống như: System.Data.Entity.DynamicProxies.Dealer_D4CEAA0F527F5360DEB9B2B35305241B76A107C37B9DB8B368984B7DF69AEE1E
Khi phù hợp để Listeners Messenger.SendToTargetOrType đăng ký() sẽ thất bại kể từ khi Loại đăng ký chỉ là "Đại lý" chứ không phải là Proxy của đại lý.
Tại sao điều này được sử dụng để hoạt động mà không yêu cầu receiveDerivedMessagesToo được đặt thành true và không phải bây giờ?
Trước MVVM Light "Messenger.cs" Messenger.SendToTargetOrType() có mã này:
private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token)
{
var messageType = typeof(TMessage);
này làm việc rất lớn từ các loại thực tế của dữ liệu được truyền không quan trọng, chỉ cần loại của registed kiểu.
Bây giờ mã đã được đổi thành:
private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token)
{
Type messageType = message.GetType();
Bây giờ Type của tham số đang được sử dụng để thay thế. Đây là một vấn đề vì nếu "tin nhắn" của bạn là một số loại proxy, việc tìm kiếm người nghe đã đăng ký sẽ không thành công.
Bạn có thể vui lòng gửi cho tôi một bản repro tại laurent (at) galasoft (dot) ch, tôi muốn điều tra. Cảm ơn! – LBugnion
Tôi đang sử dụng ánh sáng MVVM mới nhất 3 từ trình cài đặt với Silverlight 5 và tin nhắn vẫn hoạt động, vì vậy nó phải đến từ thiết lập của bạn. – jv42
Chỉ nhìn thấy tôi đã bị phá vỡ là trong 'RaisePropertyChanged()', nhưng đó là tài liệu trên blog của @ LBugnion. – jv42