Если Вы когда нибудь хотели использовать MouseEventArgs в ViewModel, вот способ это сделать:
public class MouseBehaviour
{
public static readonly DependencyProperty MouseMoveCommandProperty =
DependencyProperty.RegisterAttached("MouseMoveCommand", typeof(ICommand), typeof(MouseBehaviour),
new FrameworkPropertyMetadata(new PropertyChangedCallback(MouseMoveCommandChanged)));
static void MouseMoveCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
FrameworkElement el = d as FrameworkElement;
if (el != null)
{
el.MouseMove += el_MouseMove;
}
}
static void el_MouseMove(object sender, MouseEventArgs e)
{
FrameworkElement el = (FrameworkElement)sender;
if (el != null)
{
ICommand command = GetMouseMoveCommand(el);
command.Execute(e);
}
}
public static void SetMouseMoveCommand(UIElement d, ICommand value)
{
d.SetValue(MouseMoveCommandProperty, value);
}
public static ICommand GetMouseMoveCommand(UIElement el)
{
return (ICommand)el.GetValue(MouseMoveCommandProperty);
}
}
Мы просто регистрируем прикрепленное свойство, подключаем событие MouseMove для FrameworkElement и вызываем команду.
Использование:
<Image Source="c:/temp.png"
loc:MouseBehaviour.MouseUpCommand="{Binding MouseMoveCommand}" />
Вы не должны использовать элемент Image, любой FrameworkElement будет работать.
Можно использовать для следующих событий:
- MouseUp
- MouseDown
- MouseEnter
- MouseLeave
- MouseLeftButtonDown
- MouseLeftButtonUp
- MouseMove
- MouseRightButtonDown
- MouseRightButtonUp
- MouseWheel

А чем InputBindings не устраивают?