我已将xamrin.form.maps移至MVVM,并将我的xaml设置为
<viewModels:CustomMap IsShowingUser="True" x:Name="customMap" MapPosition="{Binding MyPosition}" CustomPins="{Binding PinCollection}" />
我的customMap类
public static readonly BindableProperty MapPositionProperty = BindableProperty.Create(
nameof(MapPosition),
typeof(Position),
typeof(CustomMap),
new Position(0, 0),
propertyChanged: (b, o, n) =>
{
Console.WriteLine("here");
((CustomMap)b).MoveToRegion(MapSpan.FromCenterAndRadius(
(Position)n, Distance.FromMiles(.05)));
});
public Position MapPosition
{
get { return (Position)GetValue(MapPositionProperty); }
set { SetValue(MapPositionProperty, value); }
}
从第一页开始,我正在向地图发送信号。如果我在VM的构造函数中设置MapPosition可以正常工作,则问题是在一切绑定之前将lat和lng传递到了构造函数,否则它将不会更新。
在视图模型中,我正在收集参数以设置位置。
public override async void OnNavigatedTo(INavigationParameters parameters)
{
if (parameters.ContainsKey("mapLocation"))
{
var mapLocation = parameters.GetValue<MapLocation>("mapLocation");
myPosition = new Position(mapLocation.Lat, mapLocation.Lng);
}
}
这与属性更新的时间无关。
您将MapPosition
绑定到MyPosition
,我想这是一个属性。为了使MVVM工作,此MapPosition
必须通知它已更改,通常看起来像([documentation of INotifyPropertyChanged.PropertyChanged
)