在指定MapAnimationKind时绑定Win10 MapControl

时间:2015-08-23 14:38:50

标签: xaml mvvm bing-maps windows-10

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

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

这很有效,但是当我的视图模型发生变化时,我希望在将地图从一个中心位置转换到下一个位置时使用抛物线动画。如果我在传递TrySetViewAsync背后的代码中调用MapAnimationKind,我希望它的行为方式如此:

MapControl.TrySetViewAsync(geopoint, 13, null, null, Maps.MapAnimationKind.Bow)

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

1 个答案:

答案 0 :(得分:0)

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

关于如何在Windows 10 Universal App中使用MVVM Light,请参阅此one中的答案。

例如,以下方法放在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

享受它:)