Вам необходимо создать класс PCL, который расширяется из Maps, и добавить к нему BlindableProperty.
1º - создать класс и расширить его из Xamarin.Forms.Maps.Map
( Я включил код для привязываемого свойства, вы можете прочитать больше Здесь )
public class BindableMap : Xamarin.Forms.Maps.Map
{
public BindableMap()
{
}
public MapSpan MapSpan
{
get { return (MapSpan)GetValue(MapSpanProperty); }
set { SetValue(MapSpanProperty, value); }
}
public static readonly BindableProperty MapSpanProperty = BindableProperty.Create(
propertyName: "MapSpan",
returnType: typeof(MapSpan),
declaringType: typeof(BindableProspectDetailMap),
defaultValue: null,
defaultBindingMode: BindingMode.TwoWay,
validateValue: null,
propertyChanged: MapSpanPropertyChanged);
private static void MapSpanPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
try
{
var thisInstance = bindable as BindableProspectDetailMap;
var newMapSpan = newValue as MapSpan;
thisInstance?.MoveToRegion(newMapSpan);
}
catch (Exception ex)
{
}
}
}
2º - добавить свойство, которое будет использоваться для привязки MapSpan в ViewModel
private MapSpan _mapSpanView;
public MapSpan MapSpanView
{
get { return _mapSpanView; }
set { SetProperty(ref _mapSpanView, value); }
}
...
Position position = new Position((double)Latitude, (double)Longitude);
MapSpanView = MapSpan.FromCenterAndRadius(
prospectPosition,
Distance.FromMeters(2500)
);
3º - А затем связать его в xaml
xmlns:map="clr-namespace:YourNameSpace.Mobile.TheFolderWhereTheClassIs"
...
<StackLayout x:Name="mapHolder">
<map:BindableMap
x:Name="map"
MapSpan="{Binding MapSpanView}"
MapType="Street" IsShowingUser="True" HasZoomEnabled="True"/>
</StackLayout>