如果我在oob应用程序中有两个窗口,我该如何在它们之间进行通信?
这是silverlight 5的新功能,允许多个窗口。
答案 0 :(得分:3)
选项1:MVVM模式
两个窗口共享对同一视图模型的引用。两者都可以看到一个人做出的改变。
选项2:正常参考
窗口A可以在创建Windows B时引用它。
选项3:消息传递
您可以在Load事件中拥有您订阅的全局事件。 (确保您在Unload事件中取消订阅,否则您将泄漏内存!)Windows可以将消息发布到其他窗口侦听的事件。
答案 1 :(得分: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不是孤立的。您可以创建所需的任何内部应用程序通信机制。