2

在我的 wpf 应用程序中,我有几个用户控件,其中一个是用于选择特定数据类型的 TreeView。当 selectedItem 发生变化时,我会发布一个 selectionChanged 事件(使用 Prism 的 EventAggregator),订阅者将收到此事件。到目前为止,一切都很好。

现在,我开始在新视图中使用相同的用户控件,实际上是在新窗口中。当从新窗口触发 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 回答