我在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)
如何在保持关注点分离的同时实现这一效果?
答案 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。
享受它:)