2016-10-13 25 views
0

我目前正在使用ArcGIS Runtime SDK .NET,我希望將地圖的當前視口綁定到我的視圖模型上的屬性。但是,視圖端口(表示爲Extent)不具有setter,儘管它是依賴項屬性。MVVM中的控件調用方法

爲了設置視口,我需要在控件上調用一個方法。但我如何從視圖模型中做到這一點?我在這裏已經找到了類似的問題,但其中大部分都回答了視圖模型不應該意識到視圖。我同意這一點,但不幸的是,我不能改變這樣一個事實,即專有控件上屬性的setter與我可以綁定並從中讀取值的實際屬性是不同的方法。

回答

3

有很多方法可以做MVVM友好的工作。 我建議您將ArcGIS視圖封裝在您完全控制的自定義控件中。通過這種方式,您可以公開您所需的依賴項屬性,並在您的自定義控件中處理它們的setter。

我幾乎每次使用這種方法使用第三方組件這種方式我使組件與我的其他代碼鬆散耦合,我可以輕鬆替換它們。

+1

我想知道爲什麼我沒有想到這件事。這是一個很棒的主意,謝謝。 – artganify

+0

通常認爲可以在代碼隱藏中處理View事件,它立即將非UI特定位轉發給您的視圖模型,或者可以使用EventToCommand跳過該位。 – dotMorten

0

您可以使用附加屬性推送虛擬機請求任何偵聽視圖轉到某個視點。我用我的樣品在這裏:

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

在你的虛擬機您直接提高INPC的觀點:

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

然後最後只是綁定這在附加屬性上的MapView :

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