私はMVVMを理解しようとしてきましたが、現在はメッセンジャーを使おうとしている段階です。私が選んだフレームワークは、JoshSmithのMVVMFoundationでした。これは主に、フレームワークが小さく、C#とMVVMパターンの両方にかなり慣れていないためです。これまでのところ、別のViewModelでメソッドをトリガーするメッセージの実装はスムーズに進んでいます(私は思います)。たとえば、「NameOfMessage」で識別されるメッセージを送信します:-
App.Messenger.NotifyColleagues("NameOfMessage");
そして受信側で例えば異なるViewModel:-
App.Messenger.Register("NameOfMessage", DoSomething);
Void DoSomething()
{
// Your code that "does something" here.
}
これはすべて非常にうまく機能し、美しく機能します。ただし、メッセージと一緒にいくつかの情報を渡すのは素晴らしいことです。現時点では、みんなにハガキを送るようなものですが、あなたの休日がどれほど素晴らしいかを書くのを忘れています。
この目的のために、私は次のことを試みました。設定すると、「SentMessage」という見出しの下に、プロパティSentMessage、別名「_sentMessage」の内容を含むメッセージを送信するプロパティです:-
public string SentMessage
{
get { return _sentMessage; }
set
{
_sentMessage = value;
RaisePropertyChanged("SentMessage");
App.Messenger.NotifyColleagues("SentMessage", _sentMessage);
}
}
これはエラーのフラグを立てず、問題ないように見えます。私の問題は、このメッセージをサブスクライブするための構文です:-
App.Messenger.Register("SentMessage", param => { this.ReceivedMessage = (string)param; });
メッセージを受信して、ReceivedMessageなどの別のプロパティに文字列を入れたいのですが。私が試したのは上記です(JoshのMediator Prototypeの影響を受けています)が、これにより、「Delegate'System.Action'は1つの引数を取りません。これは、メソッドを指すことを期待しているためだと思いますか?」というエラーが発生します。
誰かが正しい構文を手伝ってくれるなら、助けていただければ幸いです。(これはすべて、WPF、.NET Framework 4、およびVisual Studio 2010を使用してC#で記述されています)