2016-10-13 2 views
0

현재 뷰 모델의 속성에 바인딩 된지도의 현재 뷰포트를 갖고 싶은 ArcGIS Runtime SDK .NET으로 작업하고 있습니다. 그러나 뷰 포트 (Extent으로 표시됨)에는 종속성 속성 임에도 불구하고 setter가 없습니다.MVVM에서 컨트롤에 대한 호출 메서드

뷰포트를 설정하려면 컨트롤의 메서드를 호출해야합니다. 하지만 뷰 모델에서 어떻게 할 수 있습니까? 나는 이미 여기에 비슷한 질문을 발견했지만 대부분은 으로 대답했다. 뷰 모델은 뷰를 인식해서는 안된다. 나는 그것에 동의하지만 유감스럽게도 독점적 컨트롤에있는 속성의 setter가 바인딩 할 수있는 실제 속성과 다른 메서드라는 사실을 변경할 수는 없습니다.

답변

3

MVVM 친화적 인 작업을 수행하는 데는 여러 가지 방법이 있습니다. 내가 제안하는 것은 완벽하게 제어 할 수있는 사용자 지정 컨트롤에서 ArcGIS보기를 래핑하는 것입니다. 이렇게하면 필요한 종속성 속성을 노출하고 사용자 정의 컨트롤에서 해당 설정자를 처리 할 수 ​​있습니다.

타사 구성 요소를 사용할 때마다이 방법을 사용하므로 구성 요소를 다른 코드와 느슨하게 결합하여 쉽게 대체 할 수 있습니다.

+1

나는 왜 이것에 대해서 생각조차하지 않는지 궁금합니다. 환상적인 아이디어입니다, 고마워요. – artganify

+0

일반적으로 뷰 이벤트를 코드 숨김으로 처리하면 UI가 아닌 특정 비트가 즉시 뷰 모델로 전달되거나 EventToCommand를 사용하여 해당 비트를 건너 뛸 수 있습니다. – dotMorten

0

첨부 된 속성을 사용하여 VM이 특정 시점으로 이동하도록 모든 청취 뷰를 요청하도록 푸시 할 수 있습니다. 여기 내 샘플에서 그 사용하고 있습니다

public Viewpoint ViewpointRequested 
{ 
    get { return m_ViewpointRequested; } 
    private set 
    { 
     m_ViewpointRequested = value; 
     RaisePropertyChanged("ViewpointRequested"); 
    } 
} 

을 그리고 마지막으로 바로지도보기에 연결된 속성이 바인딩 :

https://github.com/Esri/arcgis-runtime-demos-dotnet/blob/master/src/TurnByTurn/RoutingSample.Shared/CommandBinder.cs

당신의 VM에서는 단순히 관점에 대한 INPC 인상 :

<esri:MapView Map="{Binding Map}" 
      local:CommandBinder.RequestView="{Binding ViewpointRequested}" /> 
관련 문제