2013-06-07 27 views
28

Có thể ai đó có thể cho tôi một ví dụ về cách Gửi và Đăng ký các đối tượng tùy chỉnh giữa các lớp bằng cách sử dụng Messenger của MVVM hoặc chỉ cho tôi hướng dẫn bao gồm điều này (tốt nhất là ví dụ cụ thể) ? Tôi đã cố gắng sử dụng Messenger để truyền một đối tượng trong dự án của tôi đến một lớp khác nhưng tôi chưa bao giờ thành công ở đó. Tôi đã xem trực tuyến các ví dụ nhưng không tìm thấy bất cứ điều gì cho thấy tôi cần gì. Cảm ơn.MVVM Light Messenger - Gửi và đăng ký các đối tượng

Trả lời

50

Jesse Liberty của Microsoft có số lượng lớn concrete walk through về cách sử dụng tin nhắn trong MVVM Light. Tiền đề là tạo một lớp sẽ hoạt động như loại tin nhắn của bạn, đăng ký, sau đó xuất bản.

public class GoToPageMessage 
{ 
    public string PageName { get; set; } 
} 

này về cơ bản sẽ gửi tin nhắn dựa trên loại/lớp ở trên ...

private object GoToPage2() 
{ 
    var msg = new GoToPageMessage() { PageName = "Page2" }; 
    Messenger.Default.Send<GoToPageMessage>(msg); 
    return null; 
} 

Bây giờ bạn có thể đăng ký cho các loại thông điệp được đưa ra, đó là cùng lớp định nghĩa ở trên và cung cấp phương thức sẽ được gọi khi nhận được tin nhắn, trong trường hợp này là ReceiveMessage.

Messenger.Default.Register<GoToPageMessage> 
( 
    this, 
    (action) => ReceiveMessage(action) 
); 

private object ReceiveMessage(GoToPageMessage action) 
{ 
    StringBuilder sb = new StringBuilder("/Views/"); 
    sb.Append(action.PageName); 
    sb.Append(".xaml"); 
    NavigationService.Navigate( 
     new System.Uri(sb.ToString(), 
      System.UriKind.Relative)); 
    return null; 
} 
+1

Tôi thích sử dụng các loại quan điểm trong thông điệp thay vì một phần của tên bởi vì nó sẽ được thay đổi khi đổi tên trang web hoặc di chuyển nó đến một namespace/thư mục –

+0

Không có sự kiện Chú ý? –

+0

Cảm ơn, đây chính xác là những gì tôi đang tìm kiếm. Tôi nghĩ rằng tôi cũng sẽ vượt qua các loại chứ không phải là dây, intellisense một mình làm cho cuộc sống thú vị hơn nhiều. –