2014-09-02 67 views
1

我遵循了N + 1天的示例,並構建了一個顯示中心座標的地圖應用程序。該值是雙向綁定的,因此移動地圖也會更改該值。現在我想綁定縮放級別,但由於未知的原因,該值只能被初始化,而沒有更新。仔細檢查我發現viewmodel中ZoomLevel屬性的「Set」部分只被調用一次。Mvvmcross Android谷歌地圖,無法綁定縮放級別

下面是一些代碼snipplet:

在模型視圖我有這樣的特性:

private float _zoomLevel; 
public float ZoomLevel { 
    get { return _zoomLevel; } 
    set { 
     _zoomLevel = value; 
     RaisePropertyChanged(() => ZoomLevel); 
    } 
} 

在MyMapFragment,我有性能中心和縮放級別,看起來不太一樣:

private LatLng _center; 
public LatLng Center{ 
get { return _center; } 
set { 
     _center = value;  
     var center = CameraUpdateFactory.NewLatLngZoom(value, ZoomLevel); 
     Map.MoveCamera(center); 
    } 
} 

private float _zoomLevel; 
public float ZoomLevel{ 
    get { return _zoomLevel; } 
    set { 
     _zoomLevel = value; 
     var zoom = CameraUpdateFactory.NewLatLngZoom(Center, value); 
     Map.MoveCamera(zoom); 
    } 
} 

而在CreateBinding()方法中,我有:

var set = this.CreateBindingSet<MyMapFragment, CityGuideMapViewModel>(); 
set.Bind(this).For(v => v.Center).To(vm => vm.Center).WithConversion(new LocationToLatLngValueConverter(), null); 
set.Bind(this).For(v => v.ZoomLevel).To(vm => vm.ZoomLevel); 
set.Apply(); 

有什麼我失蹤?非常感謝!

回答

0

有什麼我失蹤?

當用戶更改縮放級別時,您當前沒有告訴MvvmCross。

您需要在MyMapFragment中包含一些檢測併發信號通知地圖縮放級別變化的代碼 - 例如您需要使用OnCameraChangeListener並激發ZoomLevelChanged事件:

public event EventHandler ZoomLevelChanged; 

private float _zoomLevel; 
public float ZoomLevel{ 
    get { return _zoomLevel; } 
    set { 
     _zoomLevel = value; 
     var zoom = CameraUpdateFactory.NewLatLngZoom(Center, value); 
     Map.MoveCamera(zoom); 
    } 
} 
+0

甜!有用!非常感謝! – 2014-09-02 10:22:22

相關問題