Hor*_*zon 12 prism mvvm silverlight-5.0
为什么我们不能在没有任何PayLoad的情况下发布事件.
_eventAggregator.GetEvent<SelectFolderEvent>().Publish(new SelectFolderEventCriteria() { });
Run Code Online (Sandbox Code Playgroud)
现在,我不需要在这里传递任何工资.但EventAggregator实现要求我有一个空类来做到这一点.
事件:
public class SelectFolderEvent : CompositePresentationEvent<SelectFolderEventCriteria>
{
}
Run Code Online (Sandbox Code Playgroud)
有效载荷:
public class SelectFolderEventCriteria
{
}
Run Code Online (Sandbox Code Playgroud)
为什么Prism没有办法只使用事件并发布它
_eventAggregator.GetEvent<SelectFolderEvent>().Publish();
Run Code Online (Sandbox Code Playgroud)
它是按设计而我不明白吗?请解释.谢谢!
Mar*_*arc 10
好问题,我没有看到没有有效载荷发布活动的原因.在某些情况下,事件已经引发的事实是您需要和想要处理的所有信息.
有两个选项:由于它是开源的,您可以获取Prism源并提取不带有效负载的CompositePresentation事件.
我不会这样做,但是将Prism作为第三方库来处理并保持原样.优良作法是为第三方库编写Facade以使其适合您的项目,在本例中为CompositePresentationEvent.这看起来像这样:
public class EmptyPresentationEvent : EventBase
{
/// <summary>
/// Event which facade is for
/// </summary>
private readonly CompositePresentationEvent<object> _innerEvent;
/// <summary>
/// Dictionary which maps parameterless actions to wrapped
/// actions which take the ignored parameter
/// </summary>
private readonly Dictionary<Action, Action<object>> _subscriberActions;
public EmptyPresentationEvent()
{
_innerEvent = new CompositePresentationEvent<object>();
_subscriberActions = new Dictionary<Action, Action<object>>();
}
public void Publish()
{
_innerEvent.Publish(null);
}
public void Subscribe(Action action)
{
Action<object> wrappedAction = o => action();
_subscriberActions.Add(action, wrappedAction);
_innerEvent.Subscribe(wrappedAction);
}
public void Unsubscribe(Action action)
{
if (!_subscriberActions.ContainsKey(action)) return;
var wrappedActionToUnsubscribe = _subscriberActions[action];
_innerEvent.Unsubscribe(wrappedActionToUnsubscribe);
_subscriberActions.Remove(action);
}
}
Run Code Online (Sandbox Code Playgroud)
如果有任何不清楚的地方,请询问.
| 归档时间: |
|
| 查看次数: |
3429 次 |
| 最近记录: |