Использование MVVM, что делать, если у элемента управления нет свойства «Command»? - PullRequest
5 голосов
/ 26 марта 2010

В моей программе мне нужен способ щелкнуть элемент управления изображением, программа принимает положение X, Y того места, где произошел щелчок, а затем создает прямоугольник вокруг этой позиции. Моя проблема в том, что я использую MVVM, поэтому весь мой код находится в отдельном файле (файл ViewModel, а не файл code-behind). Элемент управления Image не имеет свойства Command, так как лучше всего это реализовать?

Ответы [ 2 ]

9 голосов
/ 26 марта 2010

Есть несколько вариантов:

  1. Используйте код позади. Это не правило, что вы не можете использовать код позади в MVVM - и это ситуация, где это потенциально уместно. Просто сделайте так, чтобы ваш код ничего не делал, кроме маршрутизации координат к вашей ViewModel, и имейте фактическую «логику» для обработки координат в VM, и это все еще MVVM.
  2. Используйте некоторую форму присоединенного свойства, например, Blend Trigger, чтобы подключить это. Вот пост в блоге, описывающий один вариант (на основе библиотеки помощников MVVM).

Лично в этой ситуации я бы просто использовал обработчик событий в коде позади. Мое обоснование заключается в том, что обработка кликов на изображении действительно вызывает беспокойство - это просто взаимодействие. ViewModel может просто иметь метод или команду, которая получит новую точку, которая может быть запущена из вашего кода за обработчиком событий и выполнять фактическую обработку.

Это сохраняет вашу логику во ViewModel и очень тестируемой (обработка новой точки легко проверить). «Код» представления действительно очень прост и связан с представлением.

3 голосов
/ 26 марта 2010

Полностью согласен с @Reed. Похоже, вам действительно нужно выполнить некоторые Просмотр конкретных расчетов по вашему клику, так что лучше сделайте это в приведенном ниже коде. Или же вы можете создать пользовательский элемент управления, который выполняет всю эту обработку мыши, а также логику обработки координат и предоставляет желаемые свойства 'Point' зависимости. Тогда речь идет о некоторой привязке ViewModel к вновь созданному пользовательскому элементу управления.

Теперь ответ на вопрос вашего вопроса: «Используя MVVM, что делать, если у элемента управления нет свойства« Command »?» - Предположим, вам нужно дать команду click для изображения, я бы сделал трюк, чтобы поместить кнопку и переопределить Button.Controltemplate и поместить изображение внутри него. Чтобы изображение было визуальным для кнопки, и я смог получить свойство Command.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...