2

私のwpfアプリケーションには、いくつかのユーザーコントロールがあり、そのうちの1つは特定のデータ型を選択するためのTreeViewです。selectedItemが変更されると、(PrismのEventAggregatorを使用して)selectionChangedイベントを公開すると、サブスクライバーはこのイベントを取得します。ここまでは順調ですね。

ここで、新しいビューで同じユーザーコントロールを使用し始め、実際には新しいウィンドウで使用します。新しいウィンドウからselectionChangedイベントが発生すると、両方のサブスクリプションがトリガーされます。イベントの送信者を指定して、サブスクライバーがイベントの対象者を確認できるようにします。これを行う方法はたくさんありますが、今のところ好きな方法はありません。

質問があなたたちに出ます、どうすればこれを達成できますか?

4

1 に答える 1

1

これを実現する最も簡単な方法は、公開されたイベント引数に送信者を追加することです。

public class SelectionChangedEventArgs
{
    public object Sender { get; set; }

    // Other properties (e.g. SelectedItem, etc.)
}

次に、あなたが言ったように、あなたはあなたがイベントを処理するべきかどうかを知るために送信者を簡単にチェックすることができます。Prismはすでにそのような機能を提供しており、次の過負荷がありSubscribeます。

public virtual SubscriptionToken Subscribe(Action<TPayload> action,
                                           ThreadOption threadOption,
                                           bool keepSubscriberReferenceAlive,
                                           Predicate<TPayload> filter);

したがって、サブスクライブ時にプロパティをチェックするフィルターを実際に提供できるため、Senderこの条件が満たされた場合にのみハンドラーが呼び出されます。

于 2012-09-14T18:57:07.610 に答える