Mvvmcross Android谷歌地图,无法绑定缩放级别
问题描述:
我遵循了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();
有什么我失踪?非常感谢!
答
有什么我失踪?
当用户更改缩放级别时,您当前没有告诉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);
}
}
甜!有用!非常感谢! – 2014-09-02 10:22:22