То, что вы хотите, это запустить ICommand в вашей ViewModel на основе RoutedEvent FrameworkElement. К сожалению, WPF не поддерживает это "из коробки". Некоторые возможности:
1) В Expression Blend 3 есть Microsoft.Expression.Interactivity.dll, которая позволяет это. См. WPF: смесь 3 взаимодействий / поведения для примера того, как это сделать.
2) В вашем коде может быть обработчик событий, который напрямую вызывает соответствующую команду ViewModel. Например:
private void FrameworkElement_DragDelta(object sender, EventArgs e)
{
this.MyViewModel.OnDragDelta(sender, e);
}
3) Как часть Cinch , существует присоединенная команда поведения . Таким образом, вам не нужно менять свой код. Например:
Cinch:SingleEventCommand.RoutedEventName="DragDelta"
Cinch:SingleEventCommand.TheCommandToRun="{Binding Path=DragDeltaCommand}"
Обратите внимание, что это вызывает ICommand и передает объект (на самом деле SCommandArgs) в качестве параметра команды. Чтобы получить действительные аргументы перенаправленного события в вашем обработчике команд, выполните следующие действия:
var sargs = args as SCommandArgs;
if (sargs == null)
{
return;
}
var routedEventArgs = sargs.EventArgs as RoutedEventArgs; // Or whatever arguments you actually expect
if (routedEventArgs == null)
{
return;
}
// Do something here with the event arguments
РЕДАКТИРОВАТЬ: Также взгляните на Привязка команд к событиям?