当我点击地图控件时,我正试图获取位置。我知道如何获得它,但我想在ViewModel中创建它。对于Tap事件,我使用交互。
<map:Map CopyrightVisibility="Collapsed" LogoVisibility="Collapsed">
<map:MapTileLayer>
<map:MapTileLayer.TileSources>
<customMap:OpenStreetTile />
</map:MapTileLayer.TileSources>
</map:MapTileLayer>
<map:MapLayer>
<map:Pushpin Location="{Binding Location}" />
</map:MapLayer>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<cmd:EventToCommand Command="{Binding AddPushpinCommand}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</map:Map>
我可以使用GetPosition函数从eventarguments中获取位置。但是这个函数需要UIElement参数。我这样做了:
var source = (e.OriginalSource as MapLayer).ParentMap;
var point = e.GetPosition(source);
Location = source.ViewportPointToLocation(point);
但我不确定这是不是很好的解决方案。你知道怎么做吗? 感谢
答案 0 :(得分:2)
嗯,你的方法肯定有效,有时候,足够好就足够了。 ;)如果你想用你的MVVM实现100%清理,你应该避免引用视图(以及MapLayer类)。
Joost van Schaik写了一篇博文,展示了如何使用行为实现这一目标(适用于Windows Phone 8,但我确信它也适用于Windows Phone 7):http://dotnetbyexample.blogspot.nl/2013/03/simple-reverse-geocoding-with-windows.html