是否可以间接订阅活动?

时间:2012-09-05 18:16:23

标签: c# wpf events mvvm subscription

目前,我实现了这一点,我可以直接访问我想要订阅的类,但如果我有一个我无法直接访问的类会怎么样?即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.");
    }
}

1 个答案:

答案 0 :(得分:4)

所以,我不得不在我很快就完成的WPF UI中处理这个问题。由于许多原因,将UI的不同部分分开是很好的,但在实际应用中,它们通常需要彼此通信,并且传递引用是次优的。

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