1

EventAggregator在 Windows Phone 8 应用程序中使用 Caliburn.Micro。

视图模型在很多地方实现IHandle<SomeClass>

我的问题是,当发布一个对象时,将处理多个类SomeClass,即使它们可能不是预期的接收者。那么解决这个问题最好的方法是什么......

  1. 设计具有不同名称(但内容基本相同)的消息类,以便视图模型之间的所有通信都是严格点对点的?

  2. 或者在消息类中放置一个源属性,以便所有接收者都知道消息的来源,以便有条件地处理它?

4

1 回答 1

2

这个问题没有正确或错误的答案。照我看来:

  1. 在某些情况下,您需要点对点,并且可以仅出于此目的使用特定的消息类型(类)
  2. 在某些情况下,您需要像(广播)行为这样的事件
  3. 您还可以像您在 中那样使用主动取消进行广播System.Threading.Task,或者像 WPF 事件模型中的那样,其中每个处理程序都是访问者,并且可以将事件参数(例如 SomeClass)的 Handled 标志设置为 true,以便其他处理程序知道他们不应该再处理它了。

此外,该名称EventAggregator通常表明它最常见的用途是聚合处理程序,即进行广播(至少这是我的看法)

将 WPF 事件模型视为一个类比。您引发事件(发布它)但并不真正关心您拥有多少处理程序或它们在做什么。

于 2013-10-01T18:41:29.213 回答