Получение данных из представления в MVVM? - PullRequest
2 голосов
/ 14 января 2011

У меня есть приложение Silverlight Bing Map.Я использую шаблон MVVM с PRISM.Карта bing имеет свойство «BoundingRectangle», которое недоступно в XAML, но доступно через код позади.Конечно, это не приносит мне пользы, так как мне нужны данные в моей модели представления, у которых нет доступа к коду представления (а также я не хочу добавлять их, поскольку я действительно хотел бы попытаться не использовать код представления позади).если возможно).

Обычно вы делаете двухстороннее связывание со свойством viewmodel.Карта Bing будет отображать BoundingRectangle для слоев, но не для базовой карты (что я могу найти).

Я не ищу здесь хака, просто интересуюсь, каковы лучшие практики или соглашения для получения данныхвида для модели представления, которая не является «привязываемой».

Спасибо!

Ответы [ 2 ]

3 голосов
/ 14 января 2011

Привязка данных в Silverlight - это просто базовая функция, которая автоматически синхронизирует данные между вашим представлением и моделью представления (если вы следуете шаблону MVVM).Тем не менее, нет ничего плохого в том, чтобы сделать это самостоятельно!

Два главных преимущества шаблона MVVM (кроме обычного разделения проблем, которые обеспечивает большинство шаблонов пользовательского интерфейса):

  1. Это помогает модульному тестированию, модель представления можно выполнить из кода вашего модульного теста без представления.
  2. Это помогает рабочему процессу разработчика / дизайнера, уменьшая количество файлов, разделяемых между дизайнером и разработчиком.

По моему опыту, наличие небольшого количества кода, который «помогает» инфраструктуре связывания, совсем не сложно!

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

1 голос
/ 14 января 2011

CraigF, вы можете использовать шаблон Mediator, если вы используете инструментарий Galasoft Light, а затем с помощью программы Messenger отправьте сообщение View в вашу модель просмотра.Viewmodel зарегистрируется в этом сообщении, и, если получено, установите свое свойство в viewmodel и выполните некоторую логику.

...