Команды событий мыши для 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

Источник

Поделиться в соц. сетях

Опубликовать в Facebook
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Google Buzz
Опубликовать в Одноклассники
Опубликовать в Яндекс
Опубликовать в Мой Мир

Похожие статьи

Один комментарий на “Команды событий мыши для MVVM”

Добавить комментарий для Илья