2010-08-03 60 views
8

我在MVVM-Light包中看到,我可以用令牌發送消息 - 我需要做的是發送一個對象,並附帶一條消息給該對象 - 如添加,編輯,刪除任何內容。如何將MVVM-Light與令牌一起使用?

發送和接收此消息的最佳方式是什麼?我想發送它的只是: Messenger.Default.Send(myObject,ActionEnum.DELETE);

但是在接收中: Messenger.Default.Register(this,????,HandleMyMessage);

什麼是正確的語法?

謝謝!

回答

13

以下是發送和註冊代碼的快速部分。您的通知是指示接收方意圖是什麼的信息。內容是您想要發送的項目,您可以進一步識別發送消息的人員,甚至是此消息針對發件人和目標的目標。

Messenger.Default.Send<NotificationMessage<Job>>(
    new NotificationMessage<Job>(this, myJob, "Add") 
); 

Messenger.Default.Register<NotificationMessage<Job>>(
this, nm => 

{ 
    // this might be a good idea if you have multiple recipients. 
    if (nm.Target != null && 
     nm.Target != this) 
     return; 

    // This is also an option 
    if (nm.Sender != null && 
     nm.Sender != expectedFrom) // expectedFrom is the object whose code called Send 
     return; 

    // Processing the Message 
    switch(nm.Notification) 
    { 
     case "Add": 
      Job receivedJob = nm.Content; 
      // Do something with receivedJob 
      break; 
     case "Delete": 
      Job receivedJob = nm.Content; 
      // Do something with receivedJob 
      break; 
    } 
}); 
14

就像一個補充:令牌並不意味着確定一個任務(通知),而是一個接收器。使用與發件人相同的標記註冊的收件人將收到該郵件,而所有其他收件人都不會收到該郵件。

對於您想要做的事情,我使用工具包中包含的可選NotificationMessage類型。它有一個額外的字符串屬性(通知),你可以設置任何你想要的。我使用它來向接收者「下單」。

乾杯, 洛朗

+0

令牌可以是任何對象,而不僅僅是接收正確的類型? – nportelli 2010-08-06 18:07:16

+1

這是正確的,令牌與接收者無關,它只是一個對象(或像int這樣的值)。如果你喜歡,它是一個標識符。 – LBugnion 2010-08-11 09:54:35

+0

@LBugnion如果Ryan的回答是針對這個問題的最佳做法,你能評論嗎?或者你可以發佈你如何實現它?謝謝 – GONeale 2012-06-14 03:29:30

相關問題