Использование аргументов событий в переносимой библиотеке классов

В настоящее время я разрабатываю приложение для Windows 8 и Windows Phone 8. Создание представлений должно быть очень динамичным, поэтому для этого мне приходится использовать множество шаблонов данных. В этих шаблонах данных я использую Galasoft MVVMLight EventToCommand, а поскольку мне нужны аргументы события, я также использую PassEventArgsToCommand="True".

<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding Path=SelectionChangedCommand}" 
                        PassEventArgsToCommand="True"/>
</i:EventTrigger>

Проблема в том, что классы, в которых мне нужно использовать эти аргументы событий (где выполняются мои команды), должны находиться в переносимой библиотеке классов, поэтому я не могу использовать аргументы событий, специфичные для платформы, в этих классах.

private void SelectionChanged(SelectionChangedEventArgs sel)
{
     //do something
}

В моем случае я должен использовать SelectionChangedEventArgs, DateTimeValueChangedEventArgs и KeyEventArgs.

Есть ли способ заставить это работать?


person user2549557    schedule 04.07.2013    source источник


Ответы (2)


Я попробовал отражение, и это сработало.

string keyCode = "";

        if (args != null)
        {
            PropertyInfo p = args.GetType().GetProperty("Key");
            keyCode = p.GetValue(args, null).ToString();
        }
person user1545884    schedule 08.08.2013

после многих попыток я наконец нашел свое решение. Как и user1545884, я тоже использую Reflection, но метод GetValue не работает для меня. Объект SelectedItem входит в коллекцию «AddedItems», поэтому я использую метод GetProperty с «AddedItems», и я foreach в нем, пока не найду в нем свой объект.

IEnumerable ie = (parameter.GetType().GetRuntimeProperty("AddedItems").GetValue(parameter) as IEnumerable);
foreach (var item in ie)
{
    if (item is Store_Province)
    {

    }
}
person Yunus Demir    schedule 12.08.2013