別のビューモデル内で (ビューモデルを使用して) 新しいビューを開くアプリケーションがあります。新しいビューモデルには、呼び出し元のビューモデルからのいくつかのパラメーターが必要です。
ここで、Messenger というクラスを導入しました。これは次のようになります。
public class Messenger
{
private static Messenger instance;
public static Messenger Instance
{
get { return instance ?? (instance = new Messenger()); }
}
private Messenger() { }
public void SendMessage(Message message)
{
OnMessageSent temp = MessageSent;
if (temp != null)
temp(message);
}
public delegate void OnMessageSent(Message message);
public event OnMessageSent MessageSent;
}
メッセージクラスは次のようになります。
public class Message
{
public Type TargetType { get; set; }
public object Sender { get; set; }
public Type ValueType { get; set; }
public object Value { get; set; }
public string AdditionalInfo { get; set; }
}
この建物の用途は次のとおりです。
メッセージの受信者ビューモデルは追加する必要があります
Messenger.Instance.MessageSent += MessageSent;
そのコンストラクタに。そして、実装では次のようになります。
private void MessageSent(Message message)
{
if(message.TargetType == typeof(SecondViewModel))
{
if (message.ValueType == typeof (double))
{
this.MyValue= (double) message.Value;
}
}
}
これはうまくいきます。私の質問は次のとおりです。これはビューモデル間の通信に適した方法ですか、それともこの設計に弱点はありますか?