Общий EventAggregator? - PullRequest
       26

Общий EventAggregator?

0 голосов
/ 08 марта 2012

Мы хотим запустить События с именами событий, сохраненными в SQL Server

В SQL Server вы найдете ApplicationExitRequestEvent. Когда мы нажмем кнопку меню, мы получим строку из MenuItem

Type t = Type.GetType(SelectedMenu.View + "," + "AssemblyName");
var obj = Activator.CreateInstance(t);

if (t != null)
{
//Working firing Event with className
EventAggregator.GetEvent<ApplicationExitRequestEvent>().Publish(null);

//Generic?
EventAggregator.GetEvent<???>().Publish(null);
}

Можно ли это сделать?Работа с PRISM и MVVM - WPF - .NET 4.0

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

Понял, теперь работает нормально! Pimped Prism Library, чтобы получить событие по Type :-)

    /// <summary>
    /// Gets the single instance of the event managed by this EventAggregator. 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter")]
    public CompositePresentationEvent<object> GetEvent(Type type)
    {
        EventBase existingEvent = null;
        events.TryGetValue(type, out existingEvent);

        if(existingEvent != null)
            return (CompositePresentationEvent<object>)existingEvent;

        return null;
    }

Спасибо, ребята!

0 голосов
/ 08 марта 2012

Если вы посмотрите на класс EventAggregator, вы увидите, что это не что иное, как контейнер Dictionary<Type, EventBase> и метод GetEvent.Вот и все, вся фактическая работа сделана в EventBase.Чтобы добиться того, чего вы хотите, вы можете изменить класс (или сделать копию и изменить его) и добавить метод GetEvent( string typeString ), в котором вы преобразуете typeString в фактический Type (так же, как в вашем примере кода).) и использовать его для извлечения события из словаря.

...