Mvvmcross Android谷歌地图,无法绑定缩放级别
我遵循了N+1天的示例,构建了一个显示中心坐标的映射应用程序。该值是双向的,因此移动贴图也会更改该值。现在我想绑定zoomlevel,但由于未知原因,该值只会初始化,而不会更新。仔细检查,我发现viewmodel中ZoomLevel属性的“Set”部分只调用了一次 下面是一些代码snipplet: 在模型视图中,我具有以下属性:Mvvmcross Android谷歌地图,无法绑定缩放级别,android,google-maps,data-binding,xamarin,mvvmcross,Android,Google Maps,Data Binding,Xamarin,Mvvmcross,我遵循了N+1天的示例,构建了一个显示中心坐标的映射应用程序。该值是双向的,因此移动贴图也会更改该值。现在我想绑定zoomlevel,但由于未知原因,该值只会初始化,而不会更新。仔细检查,我发现viewmodel中ZoomLevel属性的“Set”部分只调用了一次 下面是一些代码snipplet: 在模型视图中,我具有以下属性: private float _zoomLevel; public float ZoomLevel { get { return _zoomLevel; }
private float _zoomLevel;
public float ZoomLevel {
get { return _zoomLevel; }
set {
_zoomLevel = value;
RaisePropertyChanged(() => ZoomLevel);
}
}
在MyMapFragment中,我有属性中心和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();
var set=this.CreateBindingSet();
set.Bind(this).For(v=>v.Center).To(vm=>vm.Center).WithConversion(newlocationToLattlingValueConverter(),null);
set.Bind(this).For(v=>v.ZoomLevel).To(vm=>vm.ZoomLevel);
set.Apply();
我有什么遗漏吗?非常感谢
我有什么遗漏吗
当用户更改缩放级别时,您当前不会告诉MvvmCross
您需要在MyMapFragment
中包含一些检测地图缩放级别变化并发出信号的代码-例如,您需要使用OnCamerachengeListener
并触发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);
}
}