Ответ 1
Хороший вопрос, я не вижу причины для публикации события без полезной нагрузки. Бывают случаи, когда факт, что событие было поднято, - это вся информация, которая вам нужна и которую нужно обработать.
Есть два варианта: поскольку он является открытым исходным кодом, вы можете взять источник 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);
}
}
Если что-то неясно, спросите.