我正在根据找到的项目/物品构建一个列表。当找到这些对象时,我希望它们使用 prism/IEventAggregator 订阅事件。它们都属于同一类型的对象,但我不希望它们订阅同一事件。即使它们属于同一类型,我也希望它们具有唯一的订阅。因此,当我发布事件时,我可以将其定向到每个唯一/特定的对象。有人有什么想法吗?这到底可行吗?
为您创建的每个对象提供唯一的事件类型将非常麻烦,并且可能缩放性很差。但是,您可以在事件对象上拥有一个属性,该属性将是要将事件定向到的特定实例。
订阅者(您的对象)都将收到事件通知,但会检查"收件人属性"以查看事件是否适合他们。如果不是,他们会忽略它,否则就会采取行动。
伪代码:
public class MyEvent {
public MyClass Recipient { get; set; }
}
public class MyClass {
public MyClass(IEventAggregator evt) {
evt.Register<MyEvent>(TakeAction);
}
private void TakeAction(MyEvent event) {
if (!event.Recipient == this) {
return;
}
// Perform the action
}
}
使用单个事件并传递包含事件相关信息的有效负载。 然后,订阅者可以根据随事件一起发送的有效负载筛选事件。
https://github.com/PrismLibrary/Prism/blob/master/Documentation/WPF/70-CommunicatingBetweenLooselyCoupledComponents.md#subscription-filtering