在指定 MapAnimationKind 的同时绑定 Win10 MapControl

Binding Win10 MapControl while specifying MapAnimationKind

我正在为 Windows 10 使用 MapControl 并将其 Center 属性 绑定到我的视图模型,如下所示:

<Maps:MapControl x:Name="MapControl" Center="{Binding MapCenter, Mode=TwoWay}" />

这可行,但我想在我的视图模型发生变化时将地图从一个中心位置过渡到下一个中​​心位置时使用抛物线动画。我希望它的行为方式与我在传递 MapAnimationKind:

后从我的代码中调用 TrySetViewAsync 时的方式相同
MapControl.TrySetViewAsync(geopoint, 13, null, null, Maps.MapAnimationKind.Bow)

如何在保持关注点分离的同时实现这种效果?

MVVMLight Messenger 的帮助下,我们可以轻松地从 ViewModel 触发它。

关于如何在Windows 10 Universal App中使用MVVM Light,看我在这个的回答。

例如下面的方法放在MainPage.xaml.cs中:

private async void SetMapView(Geopoint point)  
{  
  await MainMap.TrySetViewAsync(point, 13,0,0,Windows.UI.Xaml.Controls.Maps.MapAnimationKind.Bow);  
} 

将MainPage.xaml.cs注册到MVVMLight

提供的默认信使
Messenger.Default.Register<Geopoint>(this, Constants.SetMapViewToken, SetMapView); 

使用字符串 Constants.SetMapViewToken 作为标记来标识消息并将 SetMapView 分配为操作

internal class Constants
{  
    public static string SetMapViewToken = "SetMapView";  
}

触发 ViewModel 中的 SetMapView 方法:

Messenger.Default.Send<Geopoint>(MyLocation.Coordinate.Point, Constants.SetMapViewToken);

我已经创建了一个完整的示例并上传到 Github

尽情享受吧:)