3

目前,我已经实现了这个,我可以直接访问我想要订阅的类,但是如果我有一个我不能直接访问的类会发生什么?即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.");
    }
}
4

1 回答 1

4

所以,我不得不在我不久之后使用的 WPF UI 中处理这个问题。出于多种原因,将 UI 的不同部分分开是很好的,但在实际应用程序中,它们通常需要相互通信,并且传递引用不是最佳选择。

我在我的应用程序中使用了Event Aggregator类。它允许逻辑上分离的组件保持松散耦合,但仍然能够通过事件相互通信。这种方法为您省去了与静态事件相关的麻烦(静态事件必须在对象超出范围之前取消订阅,否则该对象将不符合垃圾回收条件)。

于 2012-09-05T18:24:14.537 回答