PubSubEvent для методов?

В предыдущем вопросе я создал класс event, public class SetObjectEvent : PubSubEvent<MyObject> { }, который работает отлично. Однако сейчас я хочу сделать то же самое с методами, поэтому мне придется расширить что-то еще, кроме PubSubEvent<>(?)

При просмотре le bigue o'le interwebz большинство вопросов типа «Как мне вызвать метод из другой ViewModel через эту ViewModel» ссылаются на зависимости или команды, которые являются прекрасными решениями, которые я использовал в прошлом. Но в этом конкретном случае ни один из них не работает, потому что я имею дело со случаем, когда дочерний элемент родительского брата должен быть вызван от указанного брата. Поскольку родитель не знает (и не может) знать о существовании своего дочернего элемента, кроме того, что дочерний элемент время от времени вызывает некоторые свойства, я решил, что использование EventAggregator было бы лучшим возможным решением, если только у кого-то есть лучшая идея, конечно.

Итак, Конкретно, мой вопрос; На что мне заменить PubSubEvent<> в моем SetObjectEvent, чтобы получить аналогичную версию CallMethodEvent : ?x?x?x? { }?


person Ciphra    schedule 13.09.2016    source источник


Ответы (2)


Не уверен, что полностью понимаю вашу проблему, потому что решение немного тривиально:

EventAggregator.GetEvent<MyEvent>().Subscribe( MyMethod );

с

public class MyEvent : PubSubEvent
{
}

Это выполняет MyMethod каждый раз, когда публикуется MyEvent, разве не для этого предназначен весь механизм событий?

Я думаю, вы также можете опубликовать метод в качестве полезной нагрузки, если хотите выполнить метод, определенный издателем в контексте каждого подписчика, но я еще не придумал для этого вариант использования :-)

person Haukinger    schedule 13.09.2016
comment
Проблема с тем, что вы делаете, заключается в том, что PubSubEvent не является допустимым аргументом. Есть только PubSubEvent<TPayLoad>, поэтому я разбрасываю фиктивную строку, как провозглашено в моем ответе самому себе. - person Ciphra; 14.09.2016
comment
Какую версию Prism вы используете? Версия 6.2 имеет PubSubEvent без параметров, если вы используете более старую версию, вы не можете избежать фиктивного параметра... - person Haukinger; 14.09.2016
comment
В этом была проблема, у меня все еще стояла 6.1. Обновился до 6.2 и работает без нареканий, спасибо! - person Ciphra; 16.09.2016

Я создал (временный) обходной путь для решения проблемы на данный момент;

Создав точно такую ​​же настройку, но со строкой CallMethodEvent : PubSubEvent<string> { }, я могу вызывать нужные методы путем публикации this.EventAggregator.GetEvent<CallMethodEvent>().Publish("SomeUselessString");, а после подписки this.EventAggregator.GetEvent<CallMethodEvent>().Subscribe((someString) => { this.MethodToBeCalled(); }); вызывается нужный метод. Основным недостатком здесь является то, что всегда есть строка, которую бросают буквально ни по какой другой причине, кроме как «заставить ее работать». Если другого ответа не появится, мне придется придерживаться его, но я бы предпочел более чистый способ решить проблему.

person Ciphra    schedule 13.09.2016