oob silverlight应用程序如何通过窗口进行通信



如果我在一个oob应用程序中有两个窗口,我如何在它们之间进行通信?

这是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

好的,所以你实际上不会使用这段代码,它有点垃圾,重点是Windows在SL5中并不是孤立的。您可以创建任何需要的内部应用程序通信机制。

选项1:MVVM模式

两个窗口共享对同一个视图模型的引用。一个人所做的改变会被两个人看到。

选项2:普通引用

Windows A在创建Windows B的引用时可以读取它。

选项3:消息传递

您可以在Load事件中订阅一个全局事件。(确保在Unload事件中取消订阅,否则会泄漏内存!)Windows可以向其他窗口侦听的事件发送消息

最新更新