Вызов метода управления картой с помощью Caliburn Micro и WP7 - PullRequest
0 голосов
/ 12 января 2011

У меня есть страница (просмотр) в приложении Windows Phone 7, которое использует элемент управления Silverlight Map.

Мне нужно вызвать метод SetView для элемента управления, но я бы хотелМне нравится придерживаться стиля сохранения функциональности MVVM в модели представления.

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

Какой лучший способ сделать это?

Ответы [ 3 ]

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

Я сам не работал с элементом управления картой, но вот несколько идей из головы:

  1. Вы можете опубликовать событие, используя IEventAggregator, для которого можно подписаться на представление и использовать его для вызова SetView.

  2. Вы можете реализовать собственный IResult, который использует ActionExecutionContext, чтобы получить представление, найти элемент управления картой и вызвать SetView для него.

  3. Вы можете реализовать IViewAware в вашей модели представления (или переопределить OnViewLoaded, если наследуете от Screen) и использовать более контролирующий подход контроллера, взаимодействуя с представлением через интерфейс для вызова SetView.

0 голосов
/ 21 апреля 2012

Я провел много исследований по этому вопросу, и этот вопрос был полезен. В конечном итоге я создал свойство Microsoft.Phone.Controls.Maps.Map в своей модели представления. Все, что мне нужно было сделать, это установить для свойства x: Name в xaml имя свойства, которое было картой в модели представления. Тогда я мог бы легко обновить карту из модели представления и вызвать SetView. Вы можете легко изменить центр карты и изменить уровень масштабирования, просто изменив эти свойства карты, поэтому вам действительно нужно вызвать SetView только при инициализации. Я считаю, что вы можете связать практически все, используя подобную технику. Элемент управления Map очень хорош для встроенного элемента управления и очень хорошо работает с Caliburn.Micro.

0 голосов
/ 12 января 2011

Я сделал это, имея свойство MapLocation в модели представления, а затем подключившись к событию PropertyChanged модели представления в представлении. Когда это свойство MapLocation, я просто вызываю SetView и передаю значение свойства MapLocation в ViewModel.

Я знаю, что это не "строго" MVVM, но то, о чем мы здесь говорим, это то, что является специфическим для вида, но не может быть связано с ним. Подход агрегатора событий, как предлагает Роб, является еще одним хорошим вариантом, но в этом сценарии он кажется чрезмерным. Я за то, чтобы работать с тем, что работает хорошо и с хорошей производительностью для пользователя:)

...