2014-09-02 151 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