Mvvmcross Android谷歌地图,无法绑定缩放级别



我以N+1天为例,构建了一个显示中心坐标的映射应用程序。该值是双向的,因此移动贴图也会更改该值。现在我想绑定zoomlevel,但由于未知原因,该值只被初始化,而没有更新。仔细检查,我发现视图模型中ZoomLevel属性的"Set"部分只调用过一次。

这里有一些代码片段:

在模型视图中,我有这样的属性:

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

在MyMapFragment中,我有属性Center和ZoomLevel,它们看起来很像:

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();

我缺什么了吗?非常感谢!

我缺什么了吗?

当用户更改缩放级别时,您当前没有通知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);
    }
}

最新更新