2011-01-11 5 views
0

Silverlight Map 컨트롤을 사용하는 Windows Phone 7 응용 프로그램에 페이지 (보기)가 있습니다.Caliburn Micro 및 WP7을 사용하여지도 컨트롤을 호출하는 방법

컨트롤에 SetView 메서드를 호출해야하지만 뷰 모델에서 기능을 유지하는 MVVM 스타일을 고수하고 싶습니다.

응용 프로그램 막대 단추를 클릭 한 후이 메서드를 호출 할 계획이므로 EventArgs 매개 변수를 통해 Map에 액세스 할 수 없습니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

1

내가지도 컨트롤과 함께 자신을 일을하지 않은,하지만 여기 내 머리 위로 오프 아이디어 몇 가지 : 당신은보기가 가입 할 수있는 IEventAggregator를 사용하여 이벤트를 게시 할 수

  1. 가 SetView를 호출하는 데 사용됩니다.

  2. ActionExecutionContext를 사용하여보기를 가져 와서지도 컨트롤을 찾아 SetView를 호출하는 사용자 지정 IResult를 구현할 수 있습니다.

  3. 뷰 모델에 IViewAware를 구현하거나 Screen에서 상속하는 경우 OnViewLoaded를 재정의하고 SetView를 호출하기위한 인터페이스를 통해 뷰와 상호 작용하여 더 많은 감독 컨트롤러 접근 방식을 따를 수 있습니다.

+0

감사합니다. Rob, 해당 옵션을 확인해 보겠습니다. 전에 CM 부분을 사용하지 않았으므로 친숙해질 수있는 좋은 기회입니다. –

0

이 작업은 뷰 모델에서 MapLocation 속성을 사용하고 뷰에서 뷰 모델의 PropertyChanged 이벤트에 연결하여 수행했습니다. 속성이 MapLocation 속성 일 때 SetView를 호출하고 ViewModel의 MapLocation 속성 값을 전달합니다.

"엄밀히 말하면"MVVM이 아니라는 것을 알고 있습니다 만, 여기서 우리가 말하고자하는 것은 특정 뷰 특정이지만 바인딩 할 수없는 것입니다. Rob이 제안하는 이벤트 수집기 방식은 또 다른 좋은 옵션이지만이 시나리오에서는 과도한 것처럼 보입니다. 나는 무엇이든 잘 작동하고 사용자에게 좋은 성능을 발휘할 것입니다.

0

저는이 특별한 것에 대해 많은 연구를했으며이 질문은 도움이되었습니다. 궁극적으로 필자는 내 ViewModel에 Microsoft.Phone.Controls.Maps.Map 속성을 만들었습니다. 내가해야 할 일은 xam : x 속성의 x : Name 속성을 뷰 모델의 Map 인 속성 이름으로 설정하는 것뿐이었습니다. 그런 다음 뷰 모델에서지도를 쉽게 업데이트하고 SetView를 호출 할 수 있습니다. 지도의 중심을 쉽게 변경하고지도의 속성을 변경하여 줌 레벨을 변경할 수 있으므로 초기화시 SetView를 호출하면됩니다. 비슷한 기술을 사용하여 무엇이든 묶을 수 있다고 생각합니다. Map 컨트롤은 즉시 사용할 수있는 컨트롤로 매우 뛰어나며 Caliburn.Micro에서 매우 뛰어납니다.

관련 문제