不太確定你想達到什麼,但我想你想從一個視圖發送消息到另一個。在這種情況下,您使用
Messenger.Send(Message.Reset);
發送消息。在收件方使用下面的代碼:
Messenger.Register<MessageOp>(this, (m) => {
if (m == MessageOp.Reset) {
// your code
}
});
非常重要:如果您使用的消息,一定要通過Messenger刪除收件人。在視圖模型的情況下,可以通過在視圖模型上調用清理來完成。在所有其他情況下使用Messenger.Unregister(收件人)。這是必要的,因爲MVVM Light中的弱行爲實現具有釋放收件人的已知問題。
但是,如果您只是想將一個按鈕(或類似的東西)綁定到某個命令上,則可以使用一個RelayCommand。
添加以下定義您的視圖模型:
public RelayCommand ResetCommand {
get {
return _resetCommand ?? (_resetCommand = new RelayCommand(
() => {
// your execution code
},
() => {
// can execute - gets called quite often!
)
));
}
}
private RelayCommand _resetCommand;
然後你可以命令綁定到一個按鈕
<button Content="Reset" Command="{Binding ResetCommand}"/>
編輯
將消息發送到特定的收件人,確實有兩種可能性:
- 發送消息時添加令牌。
- 創建只有收件人訂閱的自定義消息。
就我個人而言,我會採用第二種方法,因爲它更清晰明確 - 因此更易於維護。所以,去創造你可以做以下的自定義消息:
public class OperationMessage : GenericMessage<MessageOp> {
public OperationMessage(MessageOp operation) : base(operation) { }
}
public class ResetMessage : OperationMessage
{
public ResetMessage() : base(MessageOp.Reset) { }
}
現在,您可以發送
Messenger.Send(new ResetMessage());
和接收
Messenger.Register<ResetMessage>(this, (m) => {
// do your resetting here
});
或
Messenger.Register<OperationMessage>(this, true, (m) => {
// handle all operations here - the operation is avaiable via m.Content
});
原因爲什麼我要創建OperationMessage是它是mo靈活,並且可以根據需要通用或特定地處理操作。
答案符合您的需求嗎? – AxelEckenberger