Команды событий мыши для MVVM
Если Вы когда нибудь хотели использовать 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 не устраивают?