2013-07-04 3 views
0

В настоящее время я разрабатываю приложение как для 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.

Есть ли способ сделать эту работу?

ответ

0

Я попытался отразить, и это действительно сработало.

string keyCode = ""; 

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

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

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

    } 
} 
Смежные вопросы