普通用户控制中的Prism事件聚合器

时间:2012-09-14 18:34:41

标签: prism eventaggregator

在我的wpf应用程序中,我有几个用户控件,其中一个是用于选择特定数据类型的TreeView。当selectedItem发生更改时,我发布了一个selectionChanged事件(使用Prism的EventAggregator),订阅者将获得此事件。到目前为止,非常好。

现在,我开始在新视图中使用相同的用户控件,在新窗口中执行。当从新窗口触发selectionChanged事件时,将触发两个订阅。我想指定事件的发件人,以便订阅者可以检查事件的目标。我有很多方法可以做到这一点,但到目前为止我还没有。

所以问题告诉你们,我怎么能实现这个目标呢?

1 个答案:

答案 0 :(得分: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属性的过滤器,因此只有在满足此条件时才会调用您的处理程序。