В моей программе мне нужен способ нажать на управление Image, программа берет в этих X, Y положение того, где щелчок произошел, и затем произведите прямоугольник вокруг того положения. Моя проблема состоит в том, что я использую MVVM, таким образом, весь мой код находится в отдельном файле (файл ViewModel, а не код - позади файла). Управление Изображением не имеет свойства Command поэтому, что лучший способ состоит в том, чтобы реализовать это?
пара вариантов:
Лично в этой ситуации я, вероятно, просто использовал бы обработчик событий в программном коде. Мое объяснение заключается в том, что обработка кликов по изображению в любом случае действительно является проблемой просмотра - это просто взаимодействие. ViewModel может просто иметь метод или команду, которая принимает новую точку Point, которая может быть запущена из вашего кода за обработчиком событий и выполнять фактическую обработку.
Это сохраняет вашу логику в ViewModel и делает ее очень тестируемой (обработку новой точки легко проверить). "Код" представления действительно очень прост и связан с представлением.
Полностью согласен с @Reed. Похоже, вам действительно нужно выполнить некоторые вычисления для вашего клика, поэтому лучше сделайте это в коде. Или же вы можете создать пользовательский элемент управления, который выполняет все эти действия с мышью, а также координирует логику обработки и предоставляет желаемые «Точки» свойства зависимости. Затем речь идет о некоторой привязке ViewModel к вновь созданному пользовательскому элементу управления.
Теперь ответ на ваш вопрос: «Что делать, если при использовании MVVM у элемента управления нет свойства« Command »?» - Предположим, вам нужно дать команду щелчка на изображении, уловка, которую я бы сделал, - это разместить кнопку и переопределить Button.Controltemplate и поместить изображение внутри нее. Так что изображение будет визуальным элементом кнопки, и я смогу получить свое свойство Command.