2014-11-25 4 views
1

я в настоящее время разработки элемента управления WPF, который просто холст с некоторыми дополнительными свойствами, как линия сетки, дети перетаскивать и т.д.Force МОФ обновления управления от View Model

мне нужен механизм, чтобы назвать некоторые из моего холста функционального от просмотреть модель, привязанную к представлению, содержащую мой холст. Например, представление может содержать мой холст и кнопку «Показать сетку». Когда пользователь нажимает кнопку, холст должен рисовать сетку сам по себе.

Проблема заключается в том, чтобы сделать это в соответствии с шаблоном MVVM без прямой ссылки на холст в модели представления вида. Какова наилучшая практика?

+0

У меня нет времени, чтобы написать ответ. Посмотрите, как использовать RoutedCommand. Подключите его под свой контроль и поднимите его из ViewModel. –

ответ

0

Материал, связанный с UI, может быть все еще записан в виде файла cs cs. Это не значит, что вы нарушили MVVM. Если модели представления предназначены для бизнес-логики, просмотр за ними - для логики представления. Чтобы добиться большего количества инкапсуляции и повторного использования, вы можете использовать Behaviors.

Вы можете написать поведение, которое выполняет всю логику рисования и прикрепить его к кнопке. Даже вы можете добавить свойства зависимостей к своему поведению, чтобы иметь больше контроля над ним.

+0

Да, вся конкретная логика, связанная с пользовательским интерфейсом, находится в контрольном коде (я просто наследую Canvas). На моей кнопке привязана команда. Обработчик команд ShowGrid() находится в режиме просмотра. Что я должен писать в нем, чтобы сделать сетчатые линии в холсте? –

+0

Добавить поведение с зависимым свойством типа Boolean, ShowGridLines. Выполняйте логику рендеринга линий сетки при обратном вызове свойства в поведении. – Jawahar

+0

Если я правильно понимаю вас, мне нужно создать настраиваемое поведение, прикрепленное к кнопке, которая будет связываться с логическим свойством, которое я могу изменить с моей виртуальной машины. Существует проблема с этим решением: я хочу, чтобы вся логика визуализации была в canvas codebehind. Есть много подобных задач, которые я делаю с помощью своего холста, и я не хочу распылять логику рендеринга среди десятков поведений –

Смежные вопросы