2013-10-15 3 views
0

У меня есть список CompositePresentationEvent, как показано ниже:Как получить события из EventAggregator в Prism динамически в цикле?

var composEvents = new List<Type> 
           { 
            typeof (GetWorkflowAnalysisDealLevelViewDataCompletedEvent), 
            typeof (NoDataReturnedEvent), 
            typeof (WorkflowDLVVisibilitiesChangedEvent), 
            typeof (RetrieveWorkflowDLVDataForExport), 
            typeof (LoadDLVTemplateEvent), 
            typeof (SaveDLVTemplateEvent), 
            typeof (PublishScreenCompositionEvent) 
           }; 

Раньше я хотел бы создать свои события и подписаться на них, используя ниже:

var evt1 = _eventAggregator.GetEvent<NoDataReturnedEvent>(); 
evt1.Subscribe(NoDataReturnedCallBack); 

Однако я хочу, чтобы иметь возможность сделать выше в петля для каждого из элементов в списке, но когда я попробовать следующие это не будет работать, давая «не может разрешить символ CEvent»:

foreach (var cEvent in composEvents) 
{ 
    var tmpEvt = _eventAggregator.GetEvent<cEvent>(); 
    tmpEvt.Subscribe(NoDataReturned); 
} 
может

someon e, пожалуйста, покажите мне элегантный способ добиться этого?

ответ

1

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

object myEvent = typeof(EventAggregator) 
     .GetMethod("GetEvent") 
     .MakeGenericMethod(cEvent) 
     .Invoke(_eventAggregator,null); 
Смежные вопросы