Используя MVVM, что сделать, когда управление не имеет свойства “Command”?

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

5
задан Harry 26 March 2010 в 17:35
поделиться

2 ответа

пара вариантов:

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

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

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

9
ответ дан 13 December 2019 в 05:32
поделиться

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

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

3
ответ дан 13 December 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: