Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mvvmcross Android谷歌地图,无法绑定缩放级别_Android_Google Maps_Data Binding_Xamarin_Mvvmcross - Fatal编程技术网

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

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; }

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

下面是一些代码snipplet:

在模型视图中,我具有以下属性:

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