在我的wpf应用程序中,我有几个用户控件,其中一个是用于选择特定数据类型的TreeView。当selectedItem发生更改时,我发布了一个selectionChanged事件(使用Prism的EventAggregator),订阅者将获得此事件。到目前为止,非常好。
现在,我开始在新视图中使用相同的用户控件,在新窗口中执行。当从新窗口触发selectionChanged事件时,将触发两个订阅。我想指定事件的发件人,以便订阅者可以检查事件的目标。我有很多方法可以做到这一点,但到目前为止我还没有。
所以问题告诉你们,我怎么能实现这个目标呢?
答案 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
属性的过滤器,因此只有在满足此条件时才会调用您的处理程序。