Mvvm 在Prism EventAggregator中发布没有负载的事件?

Mvvm 在Prism EventAggregator中发布没有负载的事件?,mvvm,prism,silverlight-5.0,Mvvm,Prism,Silverlight 5.0,为什么我们不能在没有任何负载的情况下发布事件 _eventAggregator.GetEvent<SelectFolderEvent>().Publish(new SelectFolderEventCriteria() { }); 为什么Prism没有给出一种方法,只使用事件并像这样发布它 _eventAggregator.GetEvent<SelectFolderEvent>().Publish(); \u eventAggregator.GetEv

为什么我们不能在没有任何负载的情况下发布事件

    _eventAggregator.GetEvent<SelectFolderEvent>().Publish(new SelectFolderEventCriteria() { });
为什么Prism没有给出一种方法,只使用事件并像这样发布它

    _eventAggregator.GetEvent<SelectFolderEvent>().Publish();
\u eventAggregator.GetEvent().Publish();
这是故意的,我不明白吗?
请解释一下。谢谢

好问题,我认为没有理由不发布没有有效负载的事件。在某些情况下,已引发事件的事实就是您需要和想要处理的所有信息

有两个选项:因为它是开源的,所以您可以获取Prism源代码并提取不获取有效负载的CompositePresentation事件

我不会这么做,但将Prism作为第三方库处理,并保持原样。为第三方库编写一个应用程序以使其适合您的项目是一个很好的做法,在本例中是为
CompositePresentationEvent
。这可能看起来像这样:

公共类EmptyPresentationEvent:EventBase { /// ///门面用于哪个事件 /// 私有只读CompositePresentationEvent\u innerEvent; /// ///将无参数操作映射到已包装操作的字典 ///采取忽略参数的操作 /// 专用只读词典_subscriberActions; 公共EmptyPresentationEvent() { _innerEvent=新的CompositePresentationEvent(); _subscriberActions=新字典(); } 公开发布() { _innerEvent.Publish(null); } 公开作废订阅(行动) { Action wrappedAction=o=>Action(); _subscriberActions.Add(action,wrappedAction); _订阅(wrappedAction); } 公开作废退订(行动) { if(!\u subscriberActions.ContainsKey(action))返回; var wrappedActionToUnsubscribe=_subscriberActions[action]; _innerEvent.Unsubscribe(wrappedActionToUnsubscribe); _subscriberActions.Remove(操作); } }
如果有什么不清楚的地方,请询问。

只是为了更新情况,因为从Prism 6.2开始,Prism PubSubEvents现在支持空有效负载


如果您使用的是较旧的版本,本博客将介绍如何创建一个“空”类,该类清楚地指示有效负载的意图:

很好的解决方案,我认为您只需要从EventBase继承即可使其正常工作—正如这里所建议的:是的,谢谢!如果您将它与依赖项注入一起使用,您可能不需要继承,但这不是这里的问题。。。
  public class SelectFolderEventCriteria
  {
  }
    _eventAggregator.GetEvent<SelectFolderEvent>().Publish();