あなたがachiveしようとするものは非常にわからないように行動するために、空のクラスを作成する少し奇妙に感じるが、私はあなたが別のビューからのメッセージを送りたいと思いますので、これは最良の方法だろう。この場合、
Messenger.Send(Message.Reset);
を送信してください。受信側では、次のコードを使用します。
非常に重要:メッセージングを使用する場合は、必ずメッセンジャーから受信者を削除してください。ビューモデルの場合、ビューモデルでクリーンアップを呼び出すことでこれを行うことができます。それ以外の場合は、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}"/>
編集に
を特定するメッセージを送信するには実際には2つの可能性があります:
- メッセージを送信するときにトークンを追加します。
- 受信者だけが購読するカスタムメッセージを作成します。
個人的には、私は第2のアプローチがより明確で明示的であるため、より保守的であるため、個人的にはアプローチしたいと思います。だから、あなたは次の操作を実行できるカスタムメッセージを作成するには:
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