不太确定你想达到什么,但我想你想从一个视图发送消息到另一个。在这种情况下,您使用
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