【问题标题】:Dynamic Object Subscibe to Unique Prism Event动态对象订阅独特的棱镜事件
【发布时间】:2016-03-08 17:24:32
【问题描述】:

我正在根据找到的项目/对象构建一个列表。当找到这些对象时,我希望它们使用 prism/IEventAggregator 订阅事件。它们都是相同类型的对象,但我不希望它们订阅相同的事件。即使它们属于同一类型,我也希望它们具有独特的订阅。因此,当我发布事件时,我可以将其定向到每个唯一/特定对象。有人有想法吗?这是否可行?

【问题讨论】:

    标签: c# wpf events prism


    【解决方案1】:

    为您创建的每个对象设置唯一的事件类型会非常麻烦,并且可能扩展性很差。但是,您可以在事件对象上拥有一个属性,该属性将是您要将事件定向到的特定实例。

    订阅者(您的对象)都会收到事件通知,但会检查“接收者属性”以查看事件是否适合他们。如果不是,他们会忽略它,否则采取行动。

    伪代码:

    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
       }
    }
    

    【讨论】:

    • 我开始按照同样的思路思考,这确实有道理!我会试一试。谢谢!
    【解决方案2】:

    使用单个事件并传递包含有关事件信息的有效负载。然后订阅者可以根据您随事件发送的有效负载过滤事件。

    https://github.com/PrismLibrary/Prism/blob/master/Documentation/WPF/70-CommunicatingBetweenLooselyCoupledComponents.md#subscription-filtering

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      相关资源
      最近更新 更多