oobアプリケーションに2つのウィンドウがある場合、それらの間でどのように通信しますか?oobのSilverlightアプリケーションがウィンドウを通して通信する方法
これは、複数のウィンドウを許可するSilverlight 5の新機能です。
oobアプリケーションに2つのウィンドウがある場合、それらの間でどのように通信しますか?oobのSilverlightアプリケーションがウィンドウを通して通信する方法
これは、複数のウィンドウを許可するSilverlight 5の新機能です。
これらは共通のアプリケーションで実行されます。したがって、それらは同じ静的データを共有します。したがって、通信選択の範囲は非常に大きい。ここでは一例です: -
public class MessageEventArgs : EventArgs
{
public MessageEventArgs(object payload)
{
Payload = payload;
}
public object Payload {get; private set; }
}
public class Messenger
{
private static readonly Messenger _current = new Messenger();
public static Messenger Current { get { return _current; } }
public event EventHandler<MessageEventArgs> MessageReceived;
public void Send(object payload)
{
if (MessageReceived != null)
MessageReceived(this, new MessageEventArgs(payload));
}
}
すべてのウィンドウはMessenger.Current.MessageReceived
にハンドラをアタッチすることができます(ちょうどウィンドウが閉じたときに取り外してください)と任意のウィンドウがMessenger.Current.Send
を呼び出すことができます。
あなたは実際にはこのコードを少しゴミを使用しないで、ポイントはSL5のWindowsは分離されていません。必要な内部アプリケーション通信メカニズムを作成することができます。
オプション1:MVVMパターン
両方のウィンドウが同じビューモデルへの参照を共有します。 1人によって行われた変更は、両方によって表示されます。
オプション2:通常の参照
ウィンドウAは、Windows Bにrefernceはそれを作成するときにどのようにすることができます。
オプション3:メッセージ
を渡すには、あなたはLoadイベントにサブスクライブにグローバルイベントを持つことができます。 (Unloadイベントの登録を解除すると、メモリがリークすることがあります!)Windowsは、他のウィンドウが待機するそのイベントにメッセージをポストできます。