2011-10-11 17 views

答えて

3

これらは共通のアプリケーションで実行されます。したがって、それらは同じ静的データを共有します。したがって、通信選択の範囲は非常に大きい。ここでは一例です: -

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は分離されていません。必要な内部アプリケーション通信メカニズムを作成することができます。

3

オプション1:MVVMパターン

両方のウィンドウが同じビューモデルへの参照を共有します。 1人によって行われた変更は、両方によって表示されます。

オプション2:通常の参照

ウィンドウAは、Windows Bにrefernceはそれを作成するときにどのようにすることができます。

オプション3:メッセージ

を渡すには、あなたはLoadイベントにサブスクライブにグローバルイベントを持つことができます。 (Unloadイベントの登録を解除すると、メモリがリークすることがあります!)Windowsは、他のウィンドウが待機するそのイベントにメッセージをポストできます。

関連する問題