目前,我实现了这一点,我可以直接访问我想要订阅的类,但如果我有一个我无法直接访问的类会怎么样?即X触发的事件,Y订阅它。是否可以在不使用静态事件的情况下执行此操作?就像你有两个窗口,一个东西发生在一个窗口上,你想要在第二个窗口触发它。
示例:
Y (listens for event and DoSomething()) ---.
|----Event
X (triggers event when something changes) -'
当前代码:
public static class MyEvents {
public delegate void FirstEventHandler();
}
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
SecondaryWindow secondWindow = new SecondaryWindow();
secondWindow.Show();
secondWindow.secondaryWindowEvent += new MyEvents.FirstEventHandler(callEvent);
}
protected void callEvent() {
MessageBox.Show("This is a MessageBox.");
}
}
答案 0 :(得分:4)
所以,我不得不在我很快就完成的WPF UI中处理这个问题。由于许多原因,将UI的不同部分分开是很好的,但在实际应用中,它们通常需要彼此通信,并且传递引用是次优的。
我在我的应用中使用了Event Aggregator类。它允许逻辑上分离的组件保持松散耦合,但仍然能够通过事件彼此通信。这种方法可以为您节省与静态事件相关的麻烦(静态事件必须在对象超出范围之前取消订阅,否则所述对象将无法进行垃圾回收)。