3

現在、サブスクライブしたいクラスに直接アクセスできるように実装していますが、直接アクセスできないクラスがある場合はどうなりますか? つまり、X がトリガーし、Y がサブスクライブするイベント。静的イベントを使用せずにこれを行うことは可能ですか? たとえば、2 つのウィンドウがあり、一方のウィンドウで 1 つのことが発生し、2 つ目のウィンドウで何かをトリガーしたい場合などです。

例:

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クラスを使用しました。これにより、論理的に分離されたコンポーネントが疎結合のままでありながら、 events を介して相互に通信できるようになります。このアプローチにより、静的イベントに関連する頭痛が解消されます (静的イベントは、オブジェクトがスコープ外になる前にサブスクライブを解除する必要があります。そうしないと、オブジェクトはガベージ コレクションの対象になりません)。

于 2012-09-05T18:24:14.537 に答える