1

私は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#で記述されています)

4

1 に答える 1

1

MVVMLight に移行する前に、MVVM Foundation をしばらく使用していました。メッセージのコールバック メソッドを登録するには、以下の構文を使用する必要があると思います。(私はそれをテストしていません。昔の記憶から思い出してください。)

App.Messenger.Register("SentMessage", (Action<String>)(param => { this.ReceivedMessage = (string)param; }));
于 2012-10-16T02:20:19.743 に答える